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);
}
}