php – 一种使md5_file()更快的方法?

我目前使用md5_file();运行大约15个URL并验证其MD5.有没有办法让我更快?经历所有这些都需要太长时间.对不起,如果这不是一个好问题,我只是意识到只有三个(四个如果你算这个)句子很久.
可能你现在依次做这个.即获取数据1,进程数据1,提取数据2,进程数据2,…和瓶颈可能是数据传输.
您可以使用 curl_multi_exec()并行化一点.
注册一个 CURLOPT_WRITEFUNCTION并处理每个数据块(因为md5()只在一个数据块上工作,这样很棘手).
或检查已经完成的卷曲句柄,然后处理该句柄的数据.

编辑:使用hash extension(提供增量散列函数)和php5.3+ closure:的quick& dirty示例:

$urls = array(
  'https://stackoverflow.com/','http://sstatic.net/so/img/logo.png','http://www.gravatar.com/avatar/212151980ba7123c314251b185608b1d?s=128&d=identicon&r=PG','http://de.PHP.net/images/PHP.gif'
);

$data = array();
$fnWrite = function($ch,$chunk) use(&$data) {
  foreach( $data as $d ) {
    if ( $ch===$d['curlrc'] ) {
      hash_update($d['hashrc'],$chunk);
    }
  }
};

$mh = curl_multi_init();
foreach($urls as $u) {
  $current = curl_init();
  curl_setopt($current,CURLOPT_URL,$u);
  curl_setopt($current,CURLOPT_RETURNTRANSFER,0);
  curl_setopt($current,CURLOPT_HEADER,CURLOPT_WRITEFUNCTION,$fnWrite);
  curl_multi_add_handle($mh,$current);
  $hash = hash_init('md5');
  $data[] = array('url'=>$u,'curlrc'=>$current,'hashrc'=>$hash); 
}

$active = null;
//execute the handles
do {
  $mrc = curl_multi_exec($mh,$active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
  if (curl_multi_select($mh) != -1) {
    do {
      $mrc = curl_multi_exec($mh,$active);
    } while ($mrc == CURLM_CALL_MULTI_PERFORM);
  }
}

foreach($data as $d) {
  curl_multi_remove_handle($mh,$d['curlrc']);
  echo $d['url'],': ',hash_final($d['hashrc'],false),"\n";
}
curl_multi_close($mh);

(没有检查结果,但它只是一个起点)

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...