Aktueller Standort: Startseite> Neueste Artikel> Wie beende ich mehrere gleichzeitige Anfragen mit Curl_close in einem Skript?

Wie beende ich mehrere gleichzeitige Anfragen mit Curl_close in einem Skript?

gitbox 2025-05-26

Curl ist ein sehr häufiges und leistungsstarkes Werkzeug, wenn sie PHP verwenden, um gleichzeitige HTTP -Anforderungen zu verarbeiten. Um die Effizienz zu verbessern, verwenden wir normalerweise die Funktionsreihen von CURL_MULTI_*, um mehrere gleichzeitige Anforderungen zu initiieren. Nach Abschluss aller Anfragen ist es sehr wichtig, jeden Anforderungshandle korrekt zu schließen, genau das, was curl_close () tut. In diesem Artikel wird detailliert erklärt, wie Sie curl_close () mit curl_multi_exec ( ) in einem PHP -Skript verwenden, um mehrere gleichzeitige Anforderungen zu beenden.

Grundvorbereitung: Mehrere Anfragen einleiten

Zunächst müssen wir mehrere Curl-Handles erstellen und eine Multi-Griff-Ressource über curl_multi_add_handle () hinzufügen.

 $urls = [
    "https://gitbox.net/api/service1",
    "https://gitbox.net/api/service2",
    "https://gitbox.net/api/service3"
];

$multiHandle = curl_multi_init();
$curlHandles = [];

foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[] = $ch;
}

In diesem Code fügen wir drei URLs als drei separate Curl-Anforderungen hinzu und fügen sie einer Multi-Griff-Ressource $ multihandle hinzu.

Gleichzeitige Anfragen durchführen

Nach dem Hinzufügen aller Griffe verarbeiten wir die Ausführung dieser Anforderungen über curl_multi_exec () und curl_multi_select () :

 $running = null;
do {
    curl_multi_exec($multiHandle, $running);
    curl_multi_select($multiHandle);
} while ($running > 0);

Diese Schleife wird weiter ausgeführt, bis alle gleichzeitigen Anfragen abgeschlossen sind. curl_multi_exec () initiiert tatsächlich die Anforderung, während curl_multi_select () verwendet wird, um auf die aktive Verbindung zu warten, um den CPU -Leerlauf zu vermeiden.

Reaktionsinhalt abrufen (optional)

Nach Abschluss der Ausführung möchten Sie möglicherweise das Ergebnis jeder Anfrage erhalten:

 $responses = [];
foreach ($curlHandles as $ch) {
    $responses[] = curl_multi_getcontent($ch);
}

Schließen Sie den Griff: Verwenden Sie curl_close ()

Nach Abschluss der Anfrage müssen wir sicherstellen, dass alle Ressourcen veröffentlicht werden, einschließlich der einzelnen Curl-Anfragen und der Multi-Griff-Ressource selbst. Hier kommt CURL_CLOSE () ins Spiel:

 foreach ($curlHandles as $ch) {
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

curl_multi_close($multiHandle);

Im obigen Code verwenden wir eins nach eins curl_multi_remove_handle () , um jeden Handle aus der Multi-Griff-Ressource zu entfernen, und verwenden dann curl_close () , um sie zu schließen und schließlich die Multi-Handle-Ressource selbst zu schließen.

Zusammenfassung

Die Verwendung von curl_close () zur korrekten Freigabe von Ressourcen ist ein Schritt, der nach der Verarbeitung gleichzeitiger Anforderungen nicht ignoriert werden kann. Das Folgende ist eine vollständige Zusammenfassung des Verarbeitungsprozesses:

  1. Initialisieren Sie mehrere Curl -Anforderungen;

  2. Fügen Sie einer Multi-Griff-Ressource einen Griff hinzu.

  3. Verwenden Sie curl_multi_exec (), um gleichzeitige Anforderungen zu verarbeiten.

  4. Verwenden Sie curl_multi_getContent (), um das Ergebnis (optional) zu erhalten.

  5. Verwenden Sie curl_close () und curl_multi_close (), um alle Griffe und Ressourcen zu schließen.

Mit den oben genannten Methoden können Sie mehrere gleichzeitige Anforderungen in einem einzigen PHP -Skript effizient und anmutig verwalten, um sicherzustellen, dass die Systemressourcen nicht verschwendet werden.