2012-01-04 8 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에서 가져옵니다 - 첫 번째 예

또 다른 문제는 코드가 이상하게 multi_exec 기능이없는 컬을 사용할 때 이런 일이 없었는데 어느 화면에 모두를 출력입니다. 전에도 내용을 에코해야했지만,이 내용은 묻지도 않고 모든 것을 흐리게합니다.

+0

bcoa 두 개의 서로 다른 'UR'L이 있으며 두 개의 서로 다른'컬 객체 '가 존재합니다. – diEcho

+0

아니, 그 이유가 아닙니다. 멀티 인터페이스는 동일한 루프에서 동시에 많은 드라이브를 "구동"합니다. –

답변

8

좋은 설명이 없습니다. 실제로 단일 루프로 이동할 수 있습니다.

이 예제 코드는 처음 호출/루프를 만들어야하는 curl 프로젝트의 plain C에서 수행 한 데모 코드에서 비롯된 것으로 생각합니다.

단일 루프를 사용하도록 코드를 쉽게 다시 작성할 수 있습니다.

+0

첫 번째 do while 루프를 제거하려고 시도했지만 작동하지 않습니다. –

+2

잘 지능을 사용하면 일부 라인을 지우지 않아도됩니다! 두 번째 루프의 while() 조건은 처음 실행될 때와 일치해야합니다. 그렇지 않으면 실행되지 않습니다. –

+0

고맙습니다. –

관련 문제