Aktueller Standort: Startseite> Neueste Artikel> So reinigen Sie mehrere gleichzeitige angeforderte Ressourcen mit Curl_multi_close

So reinigen Sie mehrere gleichzeitige angeforderte Ressourcen mit Curl_multi_close

gitbox 2025-05-12

Bei der Behandlung einer großen Anzahl von gleichzeitigen HTTP -Anforderungen sind die Funktionen der Curl_Multi -Serie in PHP ein sehr praktisches Werkzeug. Unter ihnen ist CURL_MULTI_CLOSE ein unverzichtbarer Schritt in der letzten Phase, mit der Ressourcen, die von Curl_Multi_init erstellt wurden, korrekt freigeben. In diesem Artikel wird die korrekte Verwendung von curl_multi_close erläutert und ein praktisches Beispiel für Sie hilft, um häufig auftretende Probleme mit Leckagen mit Ressourcen zu vermeiden.

Warum Sie curl_multi_close verwenden müssen

Immer wenn ein Curl -Multi -Handle mit curl_multi_init erstellt wird, weist PHP ein Stück Speicher zur Verwaltung des Multi -Griffs und die verschiedenen Anforderungen zu. Selbst wenn ein einzelner Klongriff (von Curl_init erzeugt) mit Curl_Close geschlossen wurde, belegt das Gesamtmulti -Handle weiterhin Systemressourcen.
Wenn Sie vergessen, curl_multi_close zu verwenden, ist es einfach, Speicherleckage und sogar Programmabstürze in hohen Parallelitätsszenarien zu verursachen.

Daher muss curl_multi_close nach Abschluss aller gleichzeitigen Anfragen aufgerufen werden, um die Ressource vollständig zu befreien .

Grundnutzungsprozess

Der allgemeine Prozess der Verwendung der Funktionen curl_multi ist wie folgt:

  1. Multi -Handle erstellen ( curl_multi_init )

  2. Erstellen und Konfigurieren mehrerer separater Curl -Handles ( curl_init )

  3. Fügen Sie jeden Curl -Handle zum Multi -Handle hinzu ( CURL_MULTI_ADD_HANDLE )

  4. Führen und überwachen Sie alle Anforderungen ( curl_multi_exec und curl_multi_select )

  5. Entfernen Sie ein einzelnes Handle ( curl_multi_remove_handle ) und schließen ( curl_close )

  6. Schließlich schließen Sie Multi -Griff ( curl_multi_close )

Beispiel: Anfordern Sie gleichzeitig mehrere Schnittstellen und säubern Sie die Ressourcen korrekt auf

Hier ist ein vollständiges Beispiel, das zeigt, wie mehrere URLs gleichzeitig anfordern und alle relevanten Ressourcen korrekt bereinigt werden:

 <?php

// Um gleichzeitige Anfragen zu sendenURLListe
$urls = [
    "https://gitbox.net/api/endpoint1",
    "https://gitbox.net/api/endpoint2",
    "https://gitbox.net/api/endpoint3",
];

// Initialisierung multi handle
$multiHandle = curl_multi_init();
$curlHandles = [];

// Initialisierung每个单独的 curl handle Und beitreten multi handle
foreach ($urls as $key => $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[$key] = $ch;
}

// Eine Anfrage ausführen
$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);
    if ($status > CURLM_OK) {
        // Fehlerbehandlung
        echo "cURL error: " . curl_multi_strerror($status);
        break;
    }

    // Warten auf eine aktive Verbindung
    curl_multi_select($multiHandle);
} while ($running > 0);

// Reaktionsergebnisse sammeln
$responses = [];
foreach ($curlHandles as $key => $ch) {
    $responses[$key] = curl_multi_getcontent($ch);
    // Jedes Kind entfernen und schließen handle
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

// Letzter Schließung multi handle
curl_multi_close($multiHandle);

// Ausgangsantwort
foreach ($responses as $index => $response) {
    echo "Response from URL {$urls[$index]}:" . PHP_EOL;
    echo $response . PHP_EOL . PHP_EOL;
}
?>

Dinge zu beachten

  • Entfernen Sie zuerst die einzelnen Curl -Griffe , schließen Sie sie und schließen Sie schließlich Multi -Griffe.

  • Schließen Sie den Multi -Griff nicht direkt und betreiben Sie dann den Kindergriff , da er unvorhersehbare Fehler verursacht.

  • In Umgebungen mit hoher Parallelität wird empfohlen, eine Zeitüberschreitungsregelung ( curlopt_timeout ) hinzuzufügen, um eine langfristige Blockade zu verhindern.

Zusammenfassen

curl_multi_close ist der letzte Schritt, um die angemessene Version von Ressourcen zu gewährleisten. Insbesondere in Multi-Concurrency-Szenarien ist es sehr wichtig, gute Abschlussgewohnheiten zu entwickeln. Durch korrektes Reinigen der Klauselverhandlung und schließlich Schließen des Multi -Griffs kann die Stabilität und Leistung von PHP -Anwendungen effektiv verhindern.