In der Entwicklung können wir auf Situationen stoßen, in denen wir gleichzeitig mehrere HTTP -Anfragen einleiten müssen. Die Curl -Bibliothek von PHP bietet eine sehr bequeme Möglichkeit, mehrere HTTP -Anforderungen parallel zu initiieren, nämlich die Funktion curl_multi_* . curl_multi_add_handle und curl_multi_close sind zwei wichtige Funktionen in dieser Art von Operation. In diesem Artikel wird erläutert, wie sie für mehrere Curl -Anforderungen korrekt verwendet werden.
Curl ist ein Tool zum Senden von Anfragen an Server und das Erhalten von Antworten. Es unterstützt mehrere Protokolle wie HTTP, HTTPS, FTP usw. In PHP kann Curl über eine Reihe von Funktionen betrieben werden.
Die Funktion curl_multi_add_handle wird verwendet, um einem mehrfachen Curl -Verarbeitungspool mehrere Curl -Sitzungsgriffe hinzuzufügen. Dies ermöglicht es uns, mehrere Anforderungen parallel zu bearbeiten, wodurch die Effizienz verbessert wird, insbesondere wenn mehrere HTTP -Anfragen gesendet werden müssen.
// Multiple initialisieren cURL Sitzung
$ch1 = curl_init('https://gitbox.net/api/resource1');
$ch2 = curl_init('https://gitbox.net/api/resource2');
// Jeweils einrichten cURL Angeforderte Optionen
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// Wie viel Initialisierung cURL Handhaben
$multiHandle = curl_multi_init();
// Wille cURL HandhabenHinzufügen zu到多重 cURL Handhaben中
curl_multi_add_handle($multiHandle, $ch1);
curl_multi_add_handle($multiHandle, $ch2);
// Eine Anfrage ausführen
do {
$status = curl_multi_exec($multiHandle, $active);
if ($active) {
// Warten Sie, bis eine Aktivitätsanfrage abgeschlossen ist
curl_multi_select($multiHandle);
}
} while ($active && $status == CURLM_OK);
// Antwortdaten erhalten
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// Ausgangsergebnis
echo "Response from resource1: $response1\n";
echo "Response from resource2: $response2\n";
// Schließen Sie jeden cURL Sitzung
curl_multi_remove_handle($multiHandle, $ch1);
curl_multi_remove_handle($multiHandle, $ch2);
Im obigen Code fügt CURL_MULTI_ADD_HANDLE zwei Curl -Handle $ CH1 und $ CH2 zum mehrfachen Curl -Handle $ multihandle hinzu und führt diese Anforderungen über CURL_MULTI_EXEC durch. curl_multi_select wartet, um die Anfrage abzuschließen, wodurch die parallele Verarbeitung implementiert wird.
Wenn alle Anfragen abgeschlossen sind, müssen wir den Multiple Curl -Griff schließen. Verwenden Sie zu diesem Zeitpunkt die Funktion curl_multi_close . Diese Funktion gibt Ressourcen frei, die sich auf das von curl_multi_init erstellte Handle beziehen.
// Wie viel zu schließen, nachdem Sie die Anfrage abgeschlossen haben cURL Handhaben
curl_multi_close($multiHandle);
Nach Verwendung von curl_multi_close werden alle Ressourcen im Zusammenhang mit dem mehrfachen Curl -Griff gereinigt. Beachten Sie, dass vor dem Schließen mehrerer COLL -Griffe alle hinzugefügten Curl -Griffe zuerst entfernt werden müssen, andernfalls werden Ressourcenlecks auftreten.
Hier ist ein vollständiges Beispiel, das zeigt, wie mehrere HTTP -Anforderungen mit CURL_MULTI_ADD_HANDLE und CURL_MULTI_CLOSE verwaltet werden:
// Multiple initialisieren cURL Sitzung
$ch1 = curl_init('https://gitbox.net/api/resource1');
$ch2 = curl_init('https://gitbox.net/api/resource2');
// aufstellen cURL Optionen
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);
// Wie viel Initialisierung cURL Handhaben
$multiHandle = curl_multi_init();
// Hinzufügen zu cURL Sitzung到多重处理池
curl_multi_add_handle($multiHandle, $ch1);
curl_multi_add_handle($multiHandle, $ch2);
// Mehrere Anfragen ausführen
do {
$status = curl_multi_exec($multiHandle, $active);
if ($active) {
curl_multi_select($multiHandle); // Warten Sie, bis die Anfrage abgeschlossen ist
}
} while ($active && $status == CURLM_OK);
// Holen Sie sich den zurückgegebenen Inhalt
$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);
// Ausgabeanforderungsergebnis
echo "Response from resource1: $response1\n";
echo "Response from resource2: $response2\n";
// Entfernen cURL Sitzung
curl_multi_remove_handle($multiHandle, $ch1);
curl_multi_remove_handle($multiHandle, $ch2);
// Wie viel ist weg cURL Handhaben
curl_multi_close($multiHandle);
Dieser Code zeigt vollständig, wie mehrere HTTP -Anforderungen parallel einleiten und mehrere Curl -Handles nach Abschluss der Anforderung schließen.