2013-03-21 13 views
20

Próbuję zrozumieć curl_multi_exec. Skopiowałem tutaj fragment ręcznego przykładu. Zastanawiam się, jak to działa? Pierwsza pętla wysyła żądanie http, jak sądzę? Ale potem następuje pętla wewnątrz pętli z funkcjami z pozornie nieudokumentowanymi flagami.zrozumienie php curl_multi_exec

Chciałbym pobrać + = 70 adresów URL + = równolegle.

http://www.php.net/manual/en/function.curl-multi-exec.php

<?php 
... 
$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); 
    } 
} 
... 
?> 

Odpowiedz

20

Można zwiedzić dwa artykuł opisujący ten przykład.

PHP and curl_multi_exec

pierwsze, tutaj jest wysoki poziom. Istnieją dwie zewnętrzne pętle. Ten pierwszy jest teraz odpowiedzialny za wyczyszczenie bufora curl. Drugi jest odpowiedzialny za oczekiwanie na więcej informacji, a następnie uzyskanie tych informacji. Jest to przykład tzw. Blokowania we/wy. Blokujemy wykonywanie pozostałej części programu, aż do zakończenia operacji we/wy sieci. Chociaż nie jest to najkorzystniejszy sposób obsługi wejść/wyjść sieciowych, to naprawdę jest to nasz jedyny wybór w synchronicznym PHP z pojedynczą nicią.

Doing curl_multi_exec the right way

Najpierw $ zmienna MRC iz instrukcji dowiadujemy się, że odpowiedź jest kod cURL zdefiniowane w cURL predefiniowanych stałych. W esencesence jest to regularna odpowiedź i jak w przypadku każdej innej funkcji PHP curl_multi_exec nie jest inna i zwraca odpowiedź dopiero po jej zakończeniu. Co oznacza, że ​​powinna być tylko JEDNA odpowiedź. W idealnym świecie ta pojedyncza odpowiedź wynosi 0 (zero) lub jest równa ustalonej stałej CURLM_OK.