<?php
function
curl_multi_fetch(
$urlarr
=
array
()){
$result
=
$res
=
$ch
=
array
();
$nch
= 0;
$mh
= curl_multi_init();
foreach
(
$urlarr
as
$nk
=>
$url
) {
$timeout
=2;
$ch
[
$nch
] = curl_init();
curl_setopt_array(
$ch
[
$nch
],
array
(
CURLOPT_URL =>
$url
,
CURLOPT_HEADER => false,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT =>
$timeout
,
));
curl_multi_add_handle(
$mh
,
$ch
[
$nch
]);
++
$nch
;
}
/* wait for performing request */
do
{
$mrc
= curl_multi_exec(
$mh
,
$running
);
}
while
(CURLM_CALL_MULTI_PERFORM ==
$mrc
);
while
(
$running
&&
$mrc
== CURLM_OK) {
// wait for network
if
(curl_multi_select(
$mh
, 0.5) > -1) {
// pull in new data;
do
{
$mrc
= curl_multi_exec(
$mh
,
$running
);
}
while
(CURLM_CALL_MULTI_PERFORM ==
$mrc
);
}
}
if
(
$mrc
!= CURLM_OK) {
error_log
(
"CURL Data Error"
);
}
/* get data */
$nch
= 0;
foreach
(
$urlarr
as
$moudle
=>
$node
) {
if
((
$err
= curl_error(
$ch
[
$nch
])) ==
''
) {
$res
[
$nch
]=curl_multi_getcontent(
$ch
[
$nch
]);
$result
[
$moudle
]=
$res
[
$nch
];
}
else
{
error_log
(
"curl error"
);
}
curl_multi_remove_handle(
$mh
,
$ch
[
$nch
]);
curl_close(
$ch
[
$nch
]);
++
$nch
;
}
curl_multi_close(
$mh
);
return
$result
;
}
$url_arr
=
array
(
);
function
microtime_float()
{
list(
$usec
,
$sec
) =
explode
(
" "
, microtime());
return
((float)
$usec
+ (float)
$sec
);
}
$time_start
= microtime_float();
$data
=curl_multi_fetch(
$url_arr
);
$time_end
= microtime_float();
$time
=
$time_end
-
$time_start
;
echo
"耗时:{$time}"
;
?>