Aktueller Standort: Startseite> Neueste Artikel> So ließen Sie Ressourcen nach curl_multi_close korrekt frei

So ließen Sie Ressourcen nach curl_multi_close korrekt frei

gitbox 2025-05-12

In PHP ist Curl eine leistungsstarke Bibliothek, die uns helfen kann, HTTP -Anfragen zu senden und Antworten zu erhalten. Mit Curl_Multi_* Funktionssätzen, insbesondere curl_multi_close , können mehrere Curl -Anforderungen gleichzeitig verarbeitet werden. Wenn wir den Vorgang an mehreren Curl -Handeln abschließen, ist es ein wichtiger Schritt, den Handle mit Curl_Multi_Close zu schließen. Wenn wir die relevanten Ressourcen jedoch nicht korrekt loslassen, kann dies zu Speicherlecks und Fehlern führen.

In diesem Artikel wird nach Verwendung der Funktion curl_multi_close korrekt die Ressourcen veröffentlicht, wodurch Speicherlecks und Fehler vermieden werden.

1. Überblick über die Curl Multiple Request -Verarbeitung

In PHP können Sie mit der Funktion curl_multi_* mehrere Curl -Anforderungen gleichzeitig bearbeiten. curl_multi_init wird verwendet, um mehrere Curl -Handles zu initialisieren, CURL_MULTI_ADD_HANDLE wird verwendet, um jeden einzelnen Curl -Handle zum mehrfachen Curl -Handle hinzuzufügen, und curl_multi_exec wird verwendet, um alle Anforderungen auszuführen. Nachdem alle Anfragen abgeschlossen sind, verwenden wir curl_multi_close , um diese Griffe zu schließen.

Beispielcode:

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

for ($i = 0; $i < 3; $i++) {
    $curlHandles[$i] = curl_init("https://gitbox.net/api/data?id=$i");
    curl_setopt($curlHandles[$i], CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($multiCurl, $curlHandles[$i]);
}

$running = null;
do {
    curl_multi_exec($multiCurl, $running);
} while ($running);

foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    echo $response . "\n";
}

// Schließen Sie alle Griffe
curl_multi_close($multiCurl);

2. Ressourcen korrekt freigeben, nachdem Sie curl_multi_close verwendet haben

Nach Verwendung von curl_multi_close , obwohl es die mehrfachen Curl -Griffe schließt, bleiben die einzelnen Curl -Griffe, bis sie explizit freigegeben werden. Wenn wir diese Griffe nicht freigeben, werden sie weiterhin Speicher aufnehmen, was zu Speicherlecks führen kann.

Um sicherzustellen, dass die Ressourcen ordnungsgemäß freigegeben werden, sollte Curl_Close nach dem Schließen der Mehrfachlup -Griffe ausdrücklich aufgerufen werden, um jeden einzelnen Curl -Griff zu befreien.

 // Schließen Sie jeden cURL Handhaben
foreach ($curlHandles as $ch) {
    curl_close($ch);
}

Wenn Sie dies tun, wird sichergestellt, dass nach curl_multi_close auch jeder Curl -Handle korrekt freigegeben wird, wodurch Speicherlecks vermieden werden.

3.. Fehlerbehandlung und Ressourcenfreigabe

Bei der Ausführung mehrerer Curl -Anforderungen kann ein Fehler auftreten. Beim Umgang dieser Fehler ist es wichtig sicherzustellen, dass der Curl -Griff nach dem Auftreten des Fehlers ordnungsgemäß geschlossen ist. Selbst wenn ein Fehler auftritt, sollten Sie am Ende immer Ressourcen aufräumen.

Beispiel für Fehlerbehandlungscode:

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

for ($i = 0; $i < 3; $i++) {
    $curlHandles[$i] = curl_init("https://gitbox.net/api/data?id=$i");
    curl_setopt($curlHandles[$i], CURLOPT_RETURNTRANSFER, true);
    curl_multi_add_handle($multiCurl, $curlHandles[$i]);
}

$running = null;
do {
    $execReturn = curl_multi_exec($multiCurl, $running);
    
    if ($execReturn !== CURLM_OK) {
        echo "Error occurred while executing multi requests.\n";
        break;
    }
} while ($running);

foreach ($curlHandles as $ch) {
    if (curl_errno($ch)) {
        echo "cURL error: " . curl_error($ch) . "\n";
    } else {
        $response = curl_multi_getcontent($ch);
        echo $response . "\n";
    }
    curl_close($ch);
}

curl_multi_close($multiCurl);

Dieser Code stellt sicher, dass selbst wenn ein Fehler auftritt, alle Curl -Handles freigegeben werden, wodurch Ressourcenleckage vermieden wird.

4. Zusammenfassung

  1. Vergessen Sie nicht, jeden Curl -Handle mit Curl_Close separat zu schließen.

  2. Wenn ein Fehler auftritt, stellen Sie sicher, dass alle Ressourcen noch befreit werden, und vermeiden Sie Speicherlecks.

  3. curl_multi_close kann nur mehrere Curl -Griffe schließen, kann jedoch separate Curl -Griffe nicht automatisch schließen. Sie müssen manuell gereinigt werden.

Das Befolgen dieser Best Practices kann Ihnen helfen, Speicherlecks und Fehler zu vermeiden und Ihr Programm effizienter und stabiler zu gestalten.