background image

PHP 基础:php 多线程下载远程多个文件

以下是对 php 多线程下载远程多个文件的方法分享,欢迎参考下
代码如下:
 

function

 remote(

$urls

$name

 = '', 

$path

 = '', 

$dir

 = './images/') {

if

 (!

is_array

(

$urls

or

 

count

(

$urls

) == 0) {

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

(' ', "%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);

}
}