Bei Verwendung von CURL in PHP sind CURL_MULTI_EXEC und CURL_MULTI_CLOSE häufig verwendete Funktionen, die nach Abschluss der Anforderung mehrere Curl -Anforderungen und Ressourcen ausführen. Das Verständnis der korrekten Verwendung dieser beiden Funktionen kann die Leistung des Programms effektiv verbessern, insbesondere wenn wir mehrere URLs gleichzeitig anfordern müssen. In diesem Artikel wird detailliert eingeführt, wie man die Funktionen curl_multi_exec und curl_multi_close korrekt verwendet und einige Vorsichtsmaßnahmen in der tatsächlichen Verwendung erörtert.
Die Funktion curl_multi_exec ist eine Mehrfachausführungsfunktion in der PHP -Curl -Erweiterung. Es ermöglicht uns, mehrere Curl -Anfragen gleichzeitig auszuführen, ohne sie nacheinander zu senden. Normalerweise ist curl_multi_exec über mehrere Anforderungen geplant, bis alle Anforderungen abgeschlossen sind. Der Ausführungsprozess ist nicht zu einer Zeit abgeschlossen, erfordert jedoch Schleifen, um festzustellen, wann die Ausführung fortgesetzt werden kann.
curl_multi_close wird verwendet, um das von curl_multi_init erstellte Curl -Sitzungshandle zu schließen und zu reinigen. Es löscht nicht automatisch jeden Curl -Handle (d. H. Ein durch curl_init erstellter Griff), sodass der Entwickler es explizit anrufen muss, um die Ressource zu befreien.
Hier ist ein einfaches PHP -Beispiel, das zeigt, wie eine Kombination von curl_multi_exec und curl_multi_close verwendet wird, um gleichzeitige Anforderungen zu stellen.
<?php
// Initialisierung cURL Mehrere Gespräche
$multiCurl = curl_multi_init();
// fragen URLs
$urls = [
"https://gitbox.net/api/data1",
"https://gitbox.net/api/data2",
"https://gitbox.net/api/data3"
];
// Alle aufbewahren cURL Handhaben
$curlHandles = [];
foreach ($urls as $url) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_multi_add_handle($multiCurl, $ch);
$curlHandles[] = $ch;
}
// implementieren cURL fragen
$running = null;
do {
curl_multi_exec($multiCurl, $running);
curl_multi_select($multiCurl);
} while ($running > 0);
// Holen Sie sich das Rückgabeergebnis
foreach ($curlHandles as $ch) {
$response = curl_multi_getcontent($ch);
echo "Response: " . $response . "\n";
}
// Schließen Sie jeden cURL Handhaben
foreach ($curlHandles as $ch) {
curl_multi_remove_handle($multiCurl, $ch);
curl_close($ch);
}
// Wie viel ist weg cURL Sitzung
curl_multi_close($multiCurl);
?>
Initialisieren Sie mehrere Sitzungen :
Verwenden Sie die Funktion curl_multi_init (), um ein Multiple Curl Session -Handle ( $ multicurl ) zu initialisieren, das von allen nachfolgenden Curl -Anforderungen verwendet wird.
Einrichten der Curl -Anforderung :
Listen Sie die URL auf, die wir im $ URLS -Array anfordern müssen (der Domänenname wurde hier durch gitbox.net ersetzt). Initialisieren Sie jeden Anforderungshandle über curl_init () und legen Sie die erforderlichen Optionen für jede Anforderung fest.
Fügen Sie mehrere Sitzungen einen Griff hinzu :
Jeder von curl_init () erstellte Curl -Handle wird zur mehrfachen Sitzung mit curl_multi_add_handle () hinzugefügt.
Führen Sie die Anfrage aus :
Alle Curl -Anforderungen werden über die Funktion curl_multi_exec () ausgeführt. Diese Funktion blockiert, bis alle Anforderungen abgeschlossen sind. Wir verwenden curl_multi_select (), damit das Programm nicht jedes Mal zu früh ist, wenn die Schleife.
Holen Sie sich den Antwortinhalt :
Verwenden Sie curl_multi_getContent (), um das Rückgabeergebnis jeder Anforderung zu erhalten.
Schließen Sie den Griff :
Nachdem alle Anforderungen abgeschlossen sind, muss das Handle für jede Anforderung über curl_multi_remove_handle () und curl_close () geschlossen werden.
Mehrere Sitzungen schließen :
Verwenden Sie schließlich curl_multi_close () , um mehrere Sitzungen zu schließen und die entsprechenden Ressourcen zu veröffentlichen.
Bei Verwendung von curl_multi_exec und curl_multi_close sollten die folgenden Punkte beachtet werden:
Parallelitätsgrenzen für Anfragen :
Beim Senden von gleichzeitigen Anforderungen kann der Server die Anzahl der Parallelität beschränken. Normalerweise beschränken wir die maximale Anzahl von Genehmigungen, z. B. das Senden von bis zu 5 Anfragen gleichzeitig, um übermäßige gleichzeitige Anfragen zu vermeiden, die zu übermäßiger Serverlast führen.
Fehlerbehandlung :
Bei der Ausführung von curl_multi_exec müssen Sie mögliche Fehler bewusst sein. Detaillierte Fehlerinformationen können über curl_error () zur Verarbeitung erhalten werden, wenn die Anforderung fehlschlägt.
Ressourcen aufräumen :
Vergessen Sie nach Verwendung von Curl_Multi_Close nicht, jeden unabhängigen Curl -Anforderungsgriff explizit zu schließen (über curl_close () ). Wenn die Ressource nicht korrekt gereinigt wird, kann dies zu Speicherlecks oder anderen Problemen mit Ressourcenverwaltung führen.
Warten Sie, bis alle Anfragen abgeschlossen sind :
curl_multi_exec ist ein Schleifenausführungsprozess, der sicherstellen muss, dass nachfolgende Vorgänge fortgesetzt werden, nachdem alle Anforderungen abgeschlossen sind. curl_multi_select () blockiert das Programm, bis eine Anfrage fertig ist.
Leistungsüberlegungen :
Bei der Behandlung einer großen Anzahl von gleichzeitigen Anfragen kann die maximale Anzahl von Gleichzeitigen und die Stapelverarbeitung von Anforderungen die Leistung der Anwendung erheblich verbessern.
Bei Verwendung von curl_multi_exec und curl_multi_close -Funktionen in PHP ist der korrekte Prozess und die Ressourcenverwaltung von entscheidender Bedeutung. Durch die angemessene Einstellung von Anforderungsoptionen, das Verarbeiten von gleichzeitigen Anforderungen und die korrekte Reinigung von Ressourcen kann das Programm effizienter und stabiler ausgeführt werden. Gleichzeitig kann der Umgang mit Fehlern, Ressourcenfreisetzung und Parallelitätskontrolle in der tatsächlichen Entwicklung viele potenzielle Probleme vermeiden. Ich hoffe, dieser Artikel hilft Ihnen, die Kombination dieser beiden Funktionen besser zu verstehen.