2013-03-21 13 views
20

Ich versuche zu verstehen, curl_multi_exec. Ich habe hier einen Teil des Handbuchs kopiert. Ich frage mich, wie es funktioniert? Die erste Schleife sendet die HTTP-Anfrage, denke ich? Aber es folgt dann eine Schleife innerhalb einer Schleife mit Funktionen mit scheinbar undokumentierten Flags.verständnis php curl_multi_exec

Ich möchte + = 70 URLs + = parallel herunterladen.

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

Antwort

20

können Sie zwei Artikel erforschen, die in diesem Beispiel beschrieben.

PHP and curl_multi_exec

Zunächst ist hier das hohe Niveau. Es gibt zwei äußere Schleifen. Der erste ist dafür verantwortlich, den Curl-Puffer gerade zu löschen. Der zweite ist dafür verantwortlich, auf weitere Informationen zu warten und diese Informationen dann zu erhalten. Dies ist ein Beispiel für das, was Blocking I/O genannt wird. Wir blockieren die Ausführung des restlichen Programms, bis die Netzwerk-E/A abgeschlossen ist. Dies ist zwar nicht der beste Weg, um Netzwerk-I/O zu handhaben, aber es ist wirklich unsere einzige Wahl bei single-threaded, synchronem PHP.

Doing curl_multi_exec the right way

Zuerst wird der MRC Variable $ und aus dem Handbuch erfahren wir, dass die Antwort ein in der cURL Vordefinierte Konstanten definiert cURL-Code ist. In Essence ist es eine reguläre Antwort und wie bei jeder anderen PHP-Funktion ist curl_multi_exec nicht anders und gibt nur eine Antwort zurück, wenn sie fertig ist. Was bedeutet, dass es nur EINE Antwort geben sollte. In einer perfekten Welt ist diese einzelne Antwort 0 (Null) oder gleich der vordefinierten Konstanten CURLM_OK.