熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> PHP編程 >> 正文

解析php多線程下載遠程多個文件

2013-11-15 12:34:04  來源: PHP編程 

  代碼如下:


function remote($urls $name = $path = $dir = /images/) {
if (!is_array($urls) or count($urls) == ) {
return false;
}
dmkdir($dir);
$curl = $text = array();
foreach($urls as $k => $v) {
if (!empty($v) && preg_match("~^http~i" $v)) {
$nurl[$k] = trim(str_replace( "%" $v));
$curl[$k] = curl_init($nurl[$k]);
curl_setopt($curl[$k] CURLOPT_IPRESOLVE CURL_IPRESOLVE_V );
curl_setopt($curl[$k] CURLOPT_RETURNTRANSFER );
curl_setopt($curl[$k] CURLOPT_HEADER );
curl_setopt($curl[$k] CURLOPT_CONNECTTIMEOUT );
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) != ) {
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 == ) {
$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;
}
From:http://tw.wingwit.com/Article/program/PHP/201311/21189.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.