2014-10-29 37 views
0

我试图实现一些多个卷曲函数,而不是简单的卷曲函数。将脚本从cURL重建为多个卷曲

我有下面的代码片段:

$curl = curl_init(); 
     curl_setopt($curl, CURLOPT_ENCODING,'gzip'); 
     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($curl, CURLOPT_URL, $url); 
     $result = curl_exec($curl); 
     curl_close($curl); 
     $rv = ($returnArray) ? json_decode($result, true) : json_decode($result); 

它给我的结果($结果回报的成功和一些数据)。我想重写它以使用curl_multi_init()。我试过这个:

$curl = curl_init(); 
     curl_setopt($curl, CURLOPT_ENCODING,'gzip'); 
     curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($curl, CURLOPT_URL, $url); 
     $mh = curl_multi_init(); 
     curl_multi_add_handle($mh,$curl); 


     $running= \null; 
     do { 
      curl_multi_exec($mh,$running); 
      $result = curl_multi_exec($mh,$running); 
     } while($running > 0); 
     curl_multi_remove_handle($mh, $curl); 

     curl_multi_close($mh); 
     $rv = ($returnArray) ? json_decode($result, true) : json_decode($result); 

我得不到结果($ result为空)。我没有任何错误。哪里不对?

+0

RTM:http://php.net/manual/en/function.curl-multi-exec.php - 'curl_multi_exec()'返回'INT '不是结果数组 – AeroX 2014-10-29 14:11:19

回答

0

这个工作对我来说:

function get_result($nodes) 
    { 
     $node_count = count($nodes); 

     $curl_arr = array(); 
     $master = curl_multi_init(); 

     for($i = 0; $i < $node_count; $i++) 
     { 
      $url = $nodes[$i]; 
      $curl_arr[$i] = curl_init($url); 
      curl_setopt($curl_arr[$i], CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($curl_arr[$i], CURLOPT_CONNECTTIMEOUT, 10); 
      curl_setopt($curl_arr[$i], CURLOPT_TIMEOUT, 10); 
      curl_setopt($curl_arr[$i], CURLOPT_ENCODING, "gzip"); 
      curl_setopt($curl_arr[$i], CURLOPT_VERBOSE, true); 
      curl_setopt($curl_arr[$i], CURLOPT_USERAGENT, 'Mozilla/5.0'); 
      curl_setopt($curl_arr[$i], CURLOPT_FOLLOWLOCATION, true); 
      curl_setopt($curl_arr[$i], CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 
      curl_multi_add_handle($master, $curl_arr[$i]); 
     } 

     do { 
      curl_multi_exec($master,$running); 
      curl_multi_select($master, 5.0); 
     } while($running > 0); 


     $output = ""; 
     for($i = 0; $i < $node_count; $i++) 
     { 
      $output .= curl_multi_getcontent($curl_arr[$i] ) . "<breaktag>"; 
      curl_multi_remove_handle($master, $curl_arr[$i]); 
      curl_close($curl_arr[$i]); 
     } 

     curl_multi_close($master); 

     return $output; 
    } 


    $nodes[] =() // your URLs 
    $responses = get_result($nodes); 
    $responses = explode("<breaktag>", $responses); //now responses is array of result 
+0

感谢您的答复,但我不能使用这种方法。我必须将curl_multi_exec($ mh,$ running)严格分配给$ result变量。我不能去太野生:( – Agrrr 2014-10-29 13:55:18