2012-01-04 47 views
3

任何人都可以幫我理解爲什麼這裏有兩個循環?CURL MULTI - 爲什麼兩個循環?

<?php 
// create both cURL resources 
$ch1 = curl_init(); 
$ch2 = curl_init(); 

// set URL and other appropriate options 
curl_setopt($ch1, CURLOPT_URL, "http://lxr.php.net/"); 
curl_setopt($ch1, CURLOPT_HEADER, 0); 
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/"); 
curl_setopt($ch2, CURLOPT_HEADER, 0); 

//create the multiple cURL handle 
$mh = curl_multi_init(); 

//add the two handles 
curl_multi_add_handle($mh,$ch1); 
curl_multi_add_handle($mh,$ch2); 

$active = null; 
//execute the handles 
do { 
    $mrc = curl_multi_exec($mh, $active); 
} while ($mrc == CURLM_CALL_MULTI_PERFORM); 

while ($active && $mrc == CURLM_OK) { 
    if (curl_multi_select($mh) != -1) { 
     do { 
      $mrc = curl_multi_exec($mh, $active); 
     } while ($mrc == CURLM_CALL_MULTI_PERFORM); 
    } 
} 

//close the handles 
curl_multi_remove_handle($mh, $ch1); 
curl_multi_remove_handle($mh, $ch2); 
curl_multi_close($mh); 

?> 

代碼從http://php.net/manual/en/function.curl-multi-exec.php拍攝 - 第一個例子

的另一個問題是,奇怪的代碼都輸出到屏幕使用curl沒有multi_exec功能時從來沒有發生過。我需要回應以前的內容,但不是爲了這個內容,它甚至沒有詢問就脫口而出。

+0

bcoa有兩種不同的'UR'L和兩種不同的'捲曲object'存在 – diEcho 2012-01-04 09:36:02

+0

不,這不是原因。多接口在相同的循環中「驅動」多個同時的接口。 – 2012-01-04 10:28:46

回答

8

有這個問題並沒有很好的解釋。它確實可以被移入一個單一的循環。

我相信這個例子的代碼與我們在普通的C在作出第一次調用/循環,看它是否應該去或不捲曲的項目做了演示代碼起源。

您可以輕鬆地重寫代碼只使用一個循環。

+0

我試圖刪除第一個while while循環,它不工作。 – 2012-01-04 10:38:52

+2

那麼你需要使用一些智能,而不僅僅是刪除一些行!在第二循環中,而()條件需要在第一次到達那裏的,當然匹配,否則它永遠不會 – 2012-01-04 10:40:21

+0

感謝名單了很多花花公子 – 2012-01-04 10:43:00