<?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 ( |
"taobao" => "http://www.taobao.com" , |
"sohu" => "http://www.sohu.com" , |
"sina" => "http://www.sina.com.cn" , |
); |
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}" ; |
?> |