PHP CURL 多线程 GET/POST 类
kevin.Zhu 发布于:2013-1-16 15:29 分类:Php 有 9 人浏览,获得评论 0 条
<?php
/****************************************************************
PHP CURL 多线程 GET/POST
Email:szj1006@vip.qq.com/QQ:690204663
Powered by XiaoSang
curl(array('url?get=data','url'),array('','post_data'));
*****************************************************************/
function
curl(
$urls
,
$post
) {
$queue
= curl_multi_init();
$map
=
array
();
foreach
(
$urls
as
$key
=>
$url
) {
$ch
= curl_init();
curl_setopt(
$ch
, CURLOPT_URL,
$url
);
curl_setopt(
$ch
, CURLOPT_TIMEOUT, 30);
curl_setopt(
$ch
, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(
$ch
, CURLOPT_POSTFIELDS,
$post
[
$key
]);
curl_setopt(
$ch
, CURLOPT_HEADER, 0);
curl_setopt(
$ch
, CURLOPT_NOSIGNAL, true);
curl_multi_add_handle(
$queue
,
$ch
);
$map
[(string)
$ch
] =
$url
;
}
$responses
=
array
();
do
{
while
((
$code
= curl_multi_exec(
$queue
,
$active
)) == CURLM_CALL_MULTI_PERFORM) ;
if
(
$code
!= CURLM_OK) {
break
; }
while
(
$done
= curl_multi_info_read(
$queue
)) {
$error
= curl_error(
$done
[
'handle'
]);
$results
= curl_multi_getcontent(
$done
[
'handle'
]);
$responses
[
$map
[(string)
$done
[
'handle'
]]] = compact(
'error'
,
'results'
);
curl_multi_remove_handle(
$queue
,
$done
[
'handle'
]);
curl_close(
$done
[
'handle'
]);
}
if
(
$active
> 0) {
curl_multi_select(
$queue
, 0.5);
}
}
while
(
$active
);
curl_multi_close(
$queue
);
return
$responses
;
}