Verwendung von Curl in PHP

WBOY
Freigeben: 2016-07-29 09:15:06
Original
1081 Leute haben es durchsucht

Mit verschiedenen Versionen von Curl wird die Testversion in PHP unterschiedlich. Es gibt zwar immer noch Verwirrung über die Verwendung von Curl im Internet, aber es gibt keine Erklärung. Ich werde die Informationen, die ich gefunden habe, mit Ihnen teilen

Zunächst einige Funktionen

curlm_multi_init

Diese Funktion gibt ein CURLM-Handle zurück, das als Eingabe für alle anderen Multifunktionsfunktionen verwendet wird und an einigen Stellen in der Dokumentation manchmal als Multi-Handle bezeichnet wird MUSS einen entsprechenden Aufruf von curl_multi_cleanup haben, wenn Der Vorgang ist abgeschlossen.

Diese Funktion gibt ein CURLM-Handle zurück, das als Eingabe für alle anderen Multifunktionsfunktionen verwendet wird, d. h. als Parameter übergeben wird, dieser Initialisierungsaufruf muss einen entsprechenden Funktionsaufruf curl_multi_cleanup haben, wenn der Vorgang abgeschlossen ist

curl_multi_exec

Diese Funktion ruft tatsächlich die zugrunde liegende Funktion „curl_multi_perform“ auf. Schauen wir uns die einfachste Beschreibung im Dokument an.

Es ist so:

liest/schreibt verfügbare Daten von jedem einfachen Handle

Ins Chinesische übersetzt: liest oder schreibt von jedem Handle. Verfügbare Daten

Es gibt einen Absatz unten

Diese Funktion verarbeitet Übertragungen auf allen hinzugefügten Handles, die Aufmerksamkeit erfordern, auf nicht blockierende Weise.

Wenn eine Anwendung herausgefunden hat, dass Daten für verfügbar sind Wenn das multi_handle oder eine Zeitüberschreitung abgelaufen ist, sollte die Anwendung diese Funktion aufrufen, um alles zu lesen/schreiben, was gerade zu lesen oder zu schreiben ist usw. curl_multi_perform gibt zurück Sobald die Lese-/Schreibvorgänge abgeschlossen sind, erfordert, dass tatsächlich Daten zum Lesen verfügbar sind oder dass Daten geschrieben werden können, kann sie nur für den Fall aufgerufen werden. Sie schreibt die Nummer von Handles, die im zweiten noch Daten übertragen Ganzzahlzeiger des Arguments.

Wenn sich die Anzahl der running_handles gegenüber dem vorherigen Aufruf geändert hat (oder geringer ist als die Anzahl der einfachen Handles, die Sie dem Multi-Handle hinzugefügt haben), wissen Sie Bescheid dass es eine oder mehrere Überweisungen gibt less „running“. Anschließend können Sie „curl_multi_info_read“ aufrufen, um Informationen über jede abgeschlossene Person zu erhalten übertragen, und die zurückgegebenen Informationen includes CURLcode und mehr. Wenn ein hinzugefügtes Handle sehr schnell fehlschlägt, wird es möglicherweise nie als Running_Handle gezählt.

Wenn Running_handles ist Bei der Rückkehr dieser Funktion auf Null (0) gesetzt, sind keine Übertragungen mehr im Gange.

Sehen wir uns an, was diese Passage sagt:

Diese Funktion verarbeitet alle Datentransfers auf der Handle hinzugefügt: Wenn ein referenzierendes Programm zu verarbeitende Daten findet oder eine Zeitüberschreitung auftritt, sollte die Funktion zurückkehren, wenn der Lese- oder Schreibvorgang abgeschlossen ist. Es sind keine zu lesenden Daten vorhanden geschrieben und kann in jedem Fall aufgerufen werden. Nach dem Aufruf dieser Funktion wird der zweite an sie übergebene Parameter (running -handles) festgelegt, der angibt, wie viele weitere aktive Verbindungen vorhanden sind.

Wenn running-handles aufgerufen wird Aus dem vorherigen Aufruf geht hervor, dass die Übertragung abgeschlossen ist oder ein Übertragungsfehler aufgetreten ist. Um den Übertragungsstatus jeder Verbindung anzuzeigen, müssen Sie die Funktion „curl-multi -read-info“ aufrufen. Sie gibt ein Array zurück enthält drei Daten. Weitere Informationen finden Sie im PHP-Hilfedokument.

Wenn run-handles von Curl auf 0 gesetzt wird, bedeutet dies, dass alle Übertragungen abgeschlossen sind.

Sie sind möglicherweise verwirrt über den Rückgabewert, oder? ?

CURLMcode-Typ, allgemeiner libcurl-Multi-Interface-Fehlercode.

Vor Version 7.20.0: Wenn Sie CURLM_CALL_MULTI_PERFORM erhalten, Dies bedeutet im Grunde, dass Sie „curl_multi_perform“ erneut aufrufen sollten, bevor Sie „select()“ für weitere Aktionen ausführen. Sie müssen dies nicht sofort tun, aber der Rückkehrcode bedeutet, dass libcurl möglicherweise mehr Daten zum Zurückgeben zur Verfügung hat oder dass mehr Daten gesendet werden müssen, bevor es „erfüllt“ ist. Beachten Sie, dass „curl_multi_perform“ dies tut Nur CURLM_CALL_MULTI_PERFORM zurückgeben wenn es sofort erneut aufgerufen werden soll. Wenn alles in Ordnung ist und nichts Sofortiges erledigt werden soll, wird CURLM_OK zurückgegeben Sie müssen auf „Aktion“ warten und diese Funktion dann erneut aufrufen.

Diese Funktion gibt nur Fehler usw. zurück, die den gesamten Multi-Stack betreffen. Es können auch dann noch Probleme bei einzelnen Übertragungen aufgetreten sein, wenn diese Funktion CURLM_OK zurückgibt . Verwenden Sie curl_multi_info_read, um herauszufinden, wie einzelne Überweisungen funktionierten.

Wenn Sie vor Version 7.20.0 CURLM_CALL_MULTI_PERFORM erhalten, bedeutet dies, dass Sie die Funktion „curl_multi_perform“ erneut aufrufen sollten. Wenn keine Daten zur Verarbeitung vorhanden sind, wird vor dem Aufruf von „curl_multi_select“ CURLM_OK zurückgegeben, und Sie müssen nur auf die Funktion warten Aktion. (Lassen Sie uns vorerst Aktion als Aktion verstehen, da ich wirklich kein besseres Wort finden kann.) Wenn CURLM_OK zurückgegeben wird, müssen Sie nur warten, bis (Hinweis), hier ist der Curl_multi_select, den wir aufgerufen haben, nur er gibt den Wert -1 zurück, egal was passiert, er wird nicht auf eine Aktion warten, aber nach der USleep-Periode wird immer noch curl-multi-perform aufgerufen, was möglicherweise keinen Sinn ergibt, aber es gibt keine Möglichkeit

curl_multi_select

Lass uns zuerst über die Funktion dieser Funktion sprechen

Für den folgenden Code

while($still_running && $result== CURLM_OK)

{

tun

{

$result=curl_multi_exec($mh,$ still_running) ;

}while($result==CURLM_CALL_MULTI_PERFORM);

}

Wenn Sie curl_multi_select in diesem Code nicht verwenden, können Sie Sie werden feststellen, dass die CPU ungeheuerlich ist. Dies wirkt sich auf die Effizienz Ihrer CPU-Auslastung aus, da dieser bedeutungslose Code (für einen bestimmten Zeitraum) weiterhin aufgerufen wird.

Diese Funktion befindet sich in PHP Im Hilfedokument wird erklärt, dass

blockiert, bis eine aktive Verbindung in der cURL-Batch-Verbindung besteht

Mit anderen Worten: Wenn keine Datenübertragung erkannt wird, wird es blockiert, aber Sie müssen Achtung Ja, der folgende Code ist in der aktuellen Version nicht anwendbar,

while($still_running && $result==CURLM_OK)

{

if(curl_multi_select($mh)!=-1)

{

do

{

$result=curl_multi_exec($mh,$still_running);

}while($result==CURLM_CALL_MULTI_PERFORM);

}

}

Es ist wirklich bedauerlich, dass dieser Code in eine tote Schleife fällt Wenn Sie den Grund dafür herausfinden, werden Sie feststellen, dass curl_multi_select nur -1 zurückgibt, was bedeutet, dass der darin enthaltene Inhalt nie vorhanden ist aufgerufen wurde. Was zu tun ist, es werden zumindest keine Fehler auftreten, wenn Sie diesen Code sehen

while($still_running && $result==CURLM_OK)

{

if(curl_multi_select($mh)==-1)

{

usleep(100);//Dies muss von Ihnen selbst geschrieben werden , Sie können es selbst entscheiden, die offizielle Empfehlung ist 100ms

}

tun

{

$result=curl_multi_exec($mh, $still_running ;

curl_multi_info_read

Diese Funktion ist im PHP-Hilfedokument sehr klar angegeben

Abfrage, ob sich das Batch-Handle in einem befindet separater Übertragungsthread Es werden Neuigkeiten oder Informationen zurückgegeben. Nachrichten können Fehlercodes enthalten, wie sie beispielsweise von einzelnen Übertragungsthreads zurückgegeben werden, oder einfach Berichte darüber, ob der Übertragungsthread abgeschlossen wurde.

Gibt bei Erfolg eine Reihe verwandter Informationen zurück und gibt
bei Fehler zurück.

Sie müssen sich nur um den Rückgabewert kümmern


Laut meinem Test gibt es bei einer Meldung nur zwei mögliche Situationen:

1. Die Übertragung wurde abgeschlossen FALSE
2. Übertragungsfehler

array(3) { ["msg"]=> "]=> ; int(0) ["handle"]=> resources(5) vom Typ (curl) }


Das ist mein Ergebnis


curl_multi_getcontent($res)

Diese Funktion ist viel einfacher

Wenn festgelegt

, dann den erhaltenen Ausgabetextstrom zurückgeben

Beachten Sie, dass der $res-Parameter ein bestimmtes Curl-Handle ist

CURLOPT_RETURNTRANSFERDas Folgende ist a URL für alle empfohlen. :

http://curl.haxx.se/ Als Benutzer müssen wir natürlich nur wissen, wie es geht Verwenden Sie es,

Hier erfahren Sie, wie Sie die Parameter von curl_setopt einstellen. Darin liegt schließlich das ganze Geheimnis von Curl


Das Obige stellt die Verwendung von Curl in PHP vor, einschließlich seiner Aspekte. Ich hoffe, es wird für Freunde hilfreich sein, die sich für PHP-Tutorials interessieren.

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage