Aktueller Standort: Startseite> Neueste Artikel> So schließen Sie alle Lockensitzungen elegant, nachdem gleichzeitige Anfragen abgeschlossen sind

So schließen Sie alle Lockensitzungen elegant, nachdem gleichzeitige Anfragen abgeschlossen sind

gitbox 2025-05-12

Bei einer großen Anzahl von gleichzeitigen HTTP -Anforderungen ist die von PHP bereitgestellte Serie von CURL_MULTI_* ein sehr praktisches Tool, mit dem Sie in einem Skript gleichzeitig mehrere Anforderungen initiieren können, wodurch die Ausführungseffizienz verbessert wird. Unter ihnen ist CURL_MULTI_CLOSE () der letzte Schritt im gesamten Prozess. Es ist verantwortlich für die Reinigung der von curl_multi_init () initialisierten Ressourcen, um sicherzustellen, dass alle Curl -Griffe ordnungsgemäß geschlossen sind und keine verborgenen Gefahren von Ressourcenleckagen hinterlassen. In diesem Artikel wird ein vollständiges Beispiel verwendet, um ausführlich zu erklären, wie alle Lockensitzungen anmutig geschlossen werden können, nachdem alle gleichzeitigen Anfragen abgeschlossen sind.

1. Überprüfung der grundlegenden Konzepte

Bei Verwendung von curl_multi_* für gleichzeitige Anforderungen lautet der allgemeine Prozess wie folgt:

  1. Initialisieren Sie einen Curl_Multi -Container.

  2. Erstellen Sie mehrere Curl -Anforderungen und fügen Sie sie dem Curl_Multi -Container hinzu.

  3. Verwenden Sie curl_multi_exec , um die Ausführung aller Anfragen voranzutreiben.

  4. Die Schleife prüft, ob die Anfrage abgeschlossen ist.

  5. Verarbeiten Sie die Ergebnisse jeder Curl -Anforderung separat.

  6. Entfernt jeden einzelnen Lockengriff .

  7. Verwenden Sie curl_multi_close () , um die Ressource zu veröffentlichen.

2. Beispielcode Erläuterung

Hier ist ein Beispiel, das zeigt, wie mehrere URLs gleichzeitig anfordern und die Ressourcen anmutig schließen können, nachdem alle Anfragen abgeschlossen sind:

 <?php

// Um gleichzeitige Anfragen zu senden URL Liste
$urls = [
    "https://gitbox.net/api/data1",
    "https://gitbox.net/api/data2",
    "https://gitbox.net/api/data3"
];

// Initialisierung curl_multi Handhaben
$multiHandle = curl_multi_init();
$curlHandles = [];

// Für jeden URL Erstellen Sie eine separate curl Handhaben,Und beitreten multi Handhaben
foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10
    ]);
    curl_multi_add_handle($multiHandle, $ch);
    $curlHandles[] = $ch;
}

// Führen Sie alle Anfragen aus
$active = null;
do {
    $mrc = curl_multi_exec($multiHandle, $active);
    // curl_multi_select Blockieren, bis eine aktive Verbindung besteht
    if ($active) {
        curl_multi_select($multiHandle);
    }
} while ($active && $mrc == CURLM_OK);

// Holen Sie sich das Ergebnis jeder Anfrage
foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    $info = curl_getinfo($ch);
    $error = curl_error($ch);

    echo "URL: " . $info['url'] . PHP_EOL;
    echo "HTTP Code: " . $info['http_code'] . PHP_EOL;
    echo "Response: " . $response . PHP_EOL;
    echo "Error: " . $error . PHP_EOL;
    echo str_repeat("-", 40) . PHP_EOL;

    // 移除并SchließungHandhaben
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

// endlich,Schließung multi Handhaben
curl_multi_close($multiHandle);

?>

3.. Dinge zu beachten über curl_multi_close

  • Rufen Sie erst an, nachdem alle Griffe entfernt wurden : Bevor Sie Curl_Multi_Close () aufrufen, sollten Sie zuerst alle Klongriffe aus dem Multi -Container über curl_multi_remove_handle () entfernen und dann curl_close () nacheinander aufrufen. Andernfalls werden Ressourcen möglicherweise nicht freigegeben oder verhaltensfrei.

  • Der Klongriff wird nicht automatisch geschlossen : curl_multi_close () schließt den Multi -Container selbst und schließt den internen Curl -Griff nicht automatisch. Sie müssen jeden von curl_init () erstellten Griff manuell schließen.

  • Anrufzeit : curl_multi_close () sollte der letzte Schritt sein, den Sie im gesamten Prozess ausführen. Der Anruf markiert das offizielle Ende des gesamten gleichzeitigen Anfrage -Lebenszyklus.

4. Zusammenfassung

Durch die Verwendung von curl_multi_init () und curl_multi_close () können Sie richtige Netzwerkanforderungen in PHP effizient stellen und sicherstellen, dass die Ressourcen nach dem Gebrauch ordnungsgemäß freigegeben, Speicherlecks oder Verbindungsausnahmen vermieden werden. Machen Sie sich unbedingt: Jeder curl_init () entspricht einem curl_close () , und jeder curl_multi_init () entspricht einem curl_multi_close () , damit Ihr Code robuster und zuverlässiger sein kann.