gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-10-31 22:44:46 26 4
gpt4 key购买 nike

我目前使用 md5_file() 来运行大约 15 个 URL 并验证它们的 MD5 哈希值。有没有办法让我更快?遍历所有这些花费的时间太长了。

最佳答案

可能您现在正在按顺序进行操作。 IE。获取数据 1,处理数据 1,获取数据 2,处理数据 2,...瓶颈可能是数据传输。
你可以使用 curl_multi_exec()将其并行化一点。要么注册一个CURLOPT_WRITEFUNCTION并处理每一 block 数据(棘手,因为 md5() 只处理一个数据 block )。
或者检查已经完成的 curl 句柄,然后处理该句柄的数据。

编辑:使用 hash extension 的快速&肮脏示例(它为增量哈希提供函数)和一个 php5.3+ closure :

$urls = array(
'http://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, 0);
curl_setopt($current, 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);

(虽然还没有检查结果......这只是一个起点)

关于php - 一种使 md5_file() 更快的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2750246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com