本文介绍下,用php实现的一个可以多线程下载远程多个文件的函数,有需要的朋友参考下。以下代码,实现:多线程下载远程多个文件,如下:
$v) {if (!empty($v) && preg_match(~^http~i, $v)) {$nurl[$k] = trim(str_replace(' ', %20, $v));$curl[$k] = curl_init($nurl[$k]);curl_setopt($curl[$k], curlopt_ipresolve, curl_ipresolve_v4 );curl_setopt($curl[$k], curlopt_returntransfer, 1);curl_setopt($curl[$k], curlopt_header, 0);curl_setopt($curl[$k], curlopt_connecttimeout, 20);if(!isset($handle)){$handle = curl_multi_init();}curl_multi_add_handle($handle, $curl[$k]);}continue ;}$active = null;do{$mrc = @curl_multi_exec($handle, $active);} while ($mrc == curlm_call_multi_perform);while ($active && $mrc == curlm_ok) {if (curl_multi_select($handle) != -1) {do {$mrc = curl_multi_exec($handle, $active);} while ($mrc == curlm_call_multi_perform);}}foreach ($curl as $k => $v) {if (curl_error($curl[$k]) == ) {if ($k == 0) {$fname[$k] = strtolower($name . '.' . pathinfo($urls[$k], pathinfo_extension));} else {$fname[$k] = strtolower($name . '_' . $k . '.' . pathinfo($urls[$k], pathinfo_extension));}$text[$k] = (string) curl_multi_getcontent($curl[$k]);$filedir[$k] = $dir.'/' . $fname[$k];if (file_put_contents($filedir[$k], $text[$k])) {$filepath[$k] = $path . $fname[$k];}}curl_multi_remove_handle($handle, $curl[$k]);curl_close($curl[$k]);}curl_multi_close($handle);return $filepath;}?>