In PHP werden die Funktionserie von CURL_MULTI_* verwendet, um gleichzeitige Curl -Anforderungen auszuführen, mit denen wir mehrere HTTP -Anforderungen gleichzeitig bearbeiten können. Wenn wir die gleichzeitige Anfrage abschließen, müssen wir curl_multi_close verwenden, um den Curl -Griff zu schließen, der normalerweise durchgeführt wird, nachdem alle gleichzeitigen Anforderungen ausgeführt wurden. In diesem Artikel werden wir untersuchen, wie man curl_multi_close , gemeinsame Fehler und die Behebung verwendet.
Die Funktion curl_multi_close wird verwendet, um das von CURL_MULTI_INIT INITORIERTE CULL Multi-Griff zu schließen. Seine Funktion besteht darin, verwandte Ressourcen aufzuräumen und Speicherlecks zu vermeiden. Bei der Verwendung verwenden wir normalerweise curl_multi_init , um einen Multiple Curl -Handle zu initialisieren und curl_multi_close aufzurufen, nachdem alle Anforderungen ausgeführt wurden, um das Handle zu schließen.
<?php
// InitialisierungcURLMehrere Griffe
$mh = curl_multi_init();
// InitialisierungcURLEinzelgriff
$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL, "https://gitbox.net/api/v1/data1");
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
$ch2 = curl_init();
curl_setopt($ch2, CURLOPT_URL, "https://gitbox.net/api/v1/data2");
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// 将Handhaben添加到Mehrere Griffe中
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// Multiple ausführencURLfragen
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running > 0);
// SchließungcURLHandhaben
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
// Schließung单个cURLHandhaben
curl_close($ch1);
curl_close($ch2);
echo "fragen完成!";
?>
Im obigen Beispiel initialisiert curl_multi_init ein Multi-Griff $ mh und dann erstellen wir zwei separate Curl-Verhandlungen $ CH1 und $ CH2 . Diese beiden Griffe werden $ mh über curl_multi_add_handle hinzugefügt und mehrere HTTP -Anforderungen werden durchgeführt. Verwenden Sie schließlich CURL_MULTI_REMOVE_HANDLE , um diese Griffe zu entfernen, und rufen Sie Curl_Multi_Close auf, um die Mehrfachgriffe zu schließen und die relevanten Ressourcen zu beseitigen.
Obwohl curl_multi_close einfach ist, werden Sie auch auf einige häufige Probleme und Fehler stoßen, wenn Sie es mit curl_multi_init verwenden. Als nächstes werden wir diese gemeinsamen Fehler und ihre Lösungen diskutieren.
Fehlerbeschreibung: Manchmal können wir vergessen, curl_multi_init aufzurufen, um mehrere Griffe zu initialisieren und direkt Handles hinzuzufügen.
Problemumgehung: Stellen Sie sicher, dass die mehreren Handles ordnungsgemäß initialisiert wurden, bevor Sie CURL_MULTI_ADD_HANDLE aufrufen. Denken Sie auch daran, curl_multi_close zu verwenden, um es am Ende aufzuräumen.
<?php
$mh = curl_multi_init(); // 确保已经Initialisierung
// Andere Codes...
curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);
// 最后Schließung
curl_multi_close($mh);
?>
Fehlerbeschreibung: Ressourcenlecks können auftreten, wenn curl_multi_remove_handle nicht ordnungsgemäß aufgerufen wird, nachdem alle Anforderungen abgeschlossen sind oder wenn curl_multi_close nicht verwendet wird, um mehrere Griffe zu schließen.
Problemumgehung: Stellen Sie sicher, dass jeder einzelne Curl -Griff, der zum Mehrfachgriff hinzugefügt wurde, entfernt wird und am Ende curl_multi_close aufgerufen wird.
<?php
// 确保移除所有Handhaben
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh); // Ressourcen aufräumen
?>
Fehlerbeschreibung: Wenn Sie mehrere Curl -Anforderungen ausführen, karten Sie nicht auf alle Anforderungen, wenn CURL_MULTI_CLOSE auf die Fertigstellung aller Anforderungen wartet, auf das Problem stoßen, dass die Anforderung nicht vollständig ausgeführt wird.
Problemumgehung: Verwenden Sie CURL_MULTI_EXEC -Schleife, um sicherzustellen, dass alle Anforderungen abgeschlossen sind. curl_multi_exec wird ausgeführt, bis alle Anforderungen abgeschlossen sind.
<?php
$running = null;
do {
curl_multi_exec($mh, $running);
} while ($running > 0); // 等待所有fragen完成
curl_multi_close($mh); // SchließungMehrere Griffe
?>
curl_multi_close ist ein Schritt, der bei der Behandlung mehrerer Curl -Anforderungen nicht ignoriert werden kann. Es stellt sicher, dass die entsprechenden Ressourcen nach Abschluss der gleichzeitigen Anfrage veröffentlicht werden können. Bei Verwendung mit curl_multi_init konzentrieren sich die gemeinsamen Fehler hauptsächlich auf die Initialisierung und Ressourcenreinigung. Die meisten Fehler können vermieden werden, indem der Code sorgfältig überprüft und sichergestellt wird, dass jeder Schritt korrekt ausgeführt wird.
Hoffentlich hilft Ihnen dieser Artikel, CURL_MULTI_CLOSE und CURL_MULTI_INIT besser zu verstehen und zu verwenden. Wenn Sie weitere Fragen haben, überlassen Sie bitte eine Nachricht, um zu diskutieren!