2011-02-22 82 views
1

我無法使用php的curl_multi_exec創建多個XML請求。PHP curl_multi_exec運行一次

問題是,包含curl_multi_exec命令的do ... while循環只運行一次,然後退出。

使用的資源:

http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/ http://php.net/manual/en/function.curl-multi-exec.php/ http://www.rustyrazorblade.com/2008/02/curl_multi_exec/

我的代碼看看:

//Multi handle curl initialization 
    $mh = curl_multi_init(); 

    //set url 
    $url = 'my_url'; 

    foreach($latLng as $id => $l) { 
     $ch[$id] = curl_init(); 

     //$request previously set     

     //Initialize and set options 
     curl_setopt($ch, CURLOPT_URL,    $url); 
     curl_setopt($ch, CURLOPT_HEADER,    0); 
     curl_setopt($ch, CURLOPT_RETURNTRANSFER,  1); 
     curl_setopt($ch, CURLOPT_POST,    1); 
     curl_setopt($ch, CURLOPT_POSTFIELDS,  $request); 

     //add to multi_handle 
     curl_multi_add_handle($mh, $ch[$id]); 
    } 

    //Execute the handles 
    $running = null; 

    do { 
     $mrc = curl_multi_exec($mh, $running); 
     $ready=curl_multi_select($mh); 
     echo "Ran once\n"; 
    } while ($mrc == CURLM_CALL_MULTI_PERFORM && $ready > 0); 

    while ($active && $mrc == CURLM_OK) { 
     if ($curl_multi_select($mh) != -1) { 
      do { 
       $mrc = curl_multi_exec($mh, $running); 
       echo "Ran again\n"; 
      } while ($mrc == CURLM_CALL_MULTI_PERFORM); 
     } 
    } 

    foreach ($mh as $c) { 
     // HTTP response code 
     $code = curl_getinfo($c, CURLINFO_HTTP_CODE); 

     // cURL error number 
     $curl_errno = curl_errno($c); 

     // cURL error message 
     $curl_error = curl_error($c); 

     // output if there was an error                
     if ($curl_error) { 
      echo("*** cURL error: ($curl_errno) $curl_error\n"); 
     } 
    } 

    //get content and remove handles 
    foreach ($ch as $c) { 
     $result[] = curl_multi_getcontent($c); 
     curl_multi_remove_handle($mh, $c); 
    } 

    print_r($result); 

    //Close curl 
    curl_multi_close($mh); 
} 

我知道該請求是有效的,因爲我執行單個curl執行時收到正確的返回數據。問題在於curl_multi_exec()。

我收到的輸出是「Ran once」,隨後是curl_multi_getcontent()調用的空數組。見下文:

然一旦 陣列 ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => )

任何幫助,非常感謝。

回答

3

你沒有正確設置curl選項:

目前,你在$ch設置選項哪個是你的數組,你需要進行具體設置在當前捲曲處理程序的選項,這在你的循環是$ch[$id]

//Initialize and set options 
    curl_setopt($ch[$id], CURLOPT_URL,    $url); 
    curl_setopt($ch[$id], CURLOPT_HEADER,    0); 
    curl_setopt($ch[$id], CURLOPT_RETURNTRANSFER,  1); 
    curl_setopt($ch[$id], CURLOPT_POST,    1); 
    curl_setopt($ch[$id], CURLOPT_POSTFIELDS,  $request); 
+0

究竟是什麼不正確? – fjordan 2011-03-01 20:07:38

+0

用描述更新了我的答案 – JamesHalsall 2011-03-02 10:59:34

0

改變這一點:

foreach ($mh as $c) { 
    $code = curl_getinfo($c, CURLINFO_HTTP_CODE); 

到:

for($i=1;$i<=count($array);$i++){ 
    $code = curl_multi_getcontent($ch[$i]); 

假設$ array是您的多個$ url的數組。