Ich glaube, dass viele Leute Probleme mit der Familie von Funktionen haben, die im PHP-Handbuch unklar sind, und die Beispiele sind so einfach, dass man daraus nichts lernen kann, aber ich habe auch viele Webseiten durchsucht Ich habe kein vollständiges Beispiel gefunden.
curl_multi_add_handle
curl_multi_close
curl_multi_getcontent
curl_multi_info_read
curl_ multi_init
curl_multi_remove_handle
curl_multi_select
Im Allgemeinen sollte der Zweck bei der Verwendung dieser Funktionen offensichtlich darin bestehen, mehrere URLs gleichzeitig anzufordern, anstatt sie einzeln anzufordern Eins, sonst ist es nicht so gut wie Sie selbst. Schleife zum Anpassen von curl_exec.
Die Schritte sind wie folgt zusammengefasst:
Schritt 1: Curl_multi_init aufrufen
Schritt 2: Curl_multi_add_handle in einer Schleife aufrufen
In diesem Schritt ist zu beachten, dass der zweite Parameter von curl_multi_add_handle wird durch Subhandle von curl_init gegeben.
Schritt 3: Rufen Sie weiterhin „curl_multi_exec“ auf.
Schritt 4: Rufen Sie „curl_multi_getcontent“ in einer Schleife auf, um die Ergebnisse nach Bedarf zu erhalten. „Schritt 5: Rufen Sie „curl_multi_remove_handle“ und „curl_close“ für jedes Worthandle auf curl_multi_close
Hier ist ein einfaches Beispiel, das online gefunden wurde. Der Autor nennt es ein schmutziges Beispiel (ich werde später erklären, warum es schmutzig ist):
/* Here's a quick and dirty example for curl-multi from PHP, tested on PHP 5.0.0RC1 CLI / FreeBSD 5.2.1 */ $connomains = array( "http://www.cnn.com/", "http://www.canada.com/", "http://www.yahoo.com/" ); $mh = curl_multi_init(); foreach ($connomains as $i => $url) { $conn[$i]=curl_init($url); curl_setopt($conn[$i],CURLOPT_RETURNTRANSFER,1); curl_multi_add_handle ($mh,$conn[$i]); } do { $n=curl_multi_exec($mh,$active); } while ($active); foreach ($connomains as $i => $url) { $res[$i]=curl_multi_getcontent($conn[$i]); curl_close($conn[$i]); } print_r($res);
Jetzt müssen wir eine Funktion „curl_multi_select“ verwenden, für die es fast keine Dokumentation gibt. Obwohl die Curl-Bibliothek von C über Anweisungen für „select“ verfügt, unterscheiden sich die Schnittstelle und die Verwendung in PHP tatsächlich von denen in C.
Ändern Sie den Do-Abschnitt oben wie folgt:
Da $active warten muss, bis alle URL-Daten empfangen wurden, bevor sie falsch werden, wird die Rückgabewertbeurteilung von curl_multi_exec verwendet Wenn noch Daten vorhanden sind, wird curl_multi_exec kontinuierlich aufgerufen. Wenn vorerst keine Daten vorhanden sind, tritt es in die Auswahlphase ein. Sobald neue Daten eingehen, kann es zur Fortsetzung der Ausführung aktiviert werden. Der Vorteil hierbei ist, dass kein unnötiger CPU-Verbrauch entsteht.do { $mrc = curl_multi_exec($mh,$active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); while ($active and $mrc == CURLM_OK) { if (curl_multi_select($mh) != -1) { do { $mrc = curl_multi_exec($mh, $active); } while ($mrc == CURLM_CALL_MULTI_PERFORM); } }
Außerdem: Es gibt einige Details, auf die Sie manchmal stoßen können:
Kontrollieren Sie das Timeout jeder Anfrage, tun Sie dies über curl_setopt vor curl_multi_add_handle:
curl_setopt($ch , CURLOPT_TIMEOUT, $ timeout);
Um festzustellen, ob eine Zeitüberschreitung oder andere Fehler aufgetreten sind, verwenden Sie: curl_error($conn[$i])
vor curl_multi_getcontent
Das obige ist der detaillierte Inhalt vonEine Erklärung der Anwendung von curl_multi-bezogenen Funktionen in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!