Aktueller Standort: Startseite> Neueste Artikel> Wie verwaltet ich den Lebenszyklus mehrerer Curl -Ressourcen nach der Verwendung von curl_close?

Wie verwaltet ich den Lebenszyklus mehrerer Curl -Ressourcen nach der Verwendung von curl_close?

gitbox 2025-05-26

Nach dem Erstellen eines Curl -Handels mit Curl_init () belegt die Ressource den Systemspeicher. Nach Abschluss der Anfrage kann das Aufrufen von Curl_Close () die Ressource befreien.

 $ch = curl_init('https://gitbox.net/api/data');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);  // Ressourcen frei machen

Hinweis: Nach dem Aufrufen von Curl_Close kann das Curl -Ressourcenhandle nicht erneut verwendet werden, andernfalls wird ein Fehler gemeldet.

2. Verwaltungsschema für mehrere Curl -Ressourcen

Wenn Sie gleichzeitig mehrere Anforderungen bearbeiten müssen, können Sie mehrere Curl -Handles erstellen:

 $urls = [
    'https://gitbox.net/api/user',
    'https://gitbox.net/api/product',
    'https://gitbox.net/api/order',
];

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

Hier speichern wir alle Handles im Array $ curlhandles für ein einfaches einheitliches Management.

3.. Veröffentlichen Sie mehrere Ressourcen manuell veröffentlichen

Nach Abschluss der Anfrage muss sie nacheinander veröffentlicht werden:

 foreach ($curlHandles as $ch) {
    $response = curl_exec($ch);
    // bewältigen $response ...

    curl_close($ch);  // Lösen Sie jeden Griff
}

Dies stellt sicher, dass jeder Griff richtig geschlossen wird und Ressourcenleckage vermeidet.

4. Verwenden Sie curl_multi , um Prozessanforderungen zu stapeln

PHP liefert eine Curl_multi -Erweiterung, die gleichzeitig mehrere Curl -Griffe verarbeiten kann, was es effizienter macht.

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

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

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

foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    // bewältigen $response ...

    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

curl_multi_close($mh);

Hier veröffentlicht CURL_MULTI_CLOSE die Multi-Griff-Manager-Ressource, während curl_close eine einzelne Handlungsressource veröffentlicht.

5. Zusammenfassung und Notizpunkte

  • Rufen Sie unbedingt curl_close an, um einen einzelnen Curl -Griff zu befreien.

  • Verwenden Sie bei Verwendung curl_multi zuerst curl_multi_remove_handle , um das Handle zu entfernen, und rufen Sie dann curl_close auf.

  • Vermeiden Sie es, den Handle erneut zu verwenden, nachdem Sie curl_close aufgerufen haben.

  • Verwenden Sie bei der Verwaltung mehrerer Griffe Arrays, um sie auf einheitliche Weise zu speichern, um die Stapelveröffentlichung zu erleichtern.

  • Versuchen Sie nach der Freigabe von Ressourcen, variable Referenzen (z. B. Verwendung von UNSET ) zu zerstören, damit die PHP -Müllsammlung effizienter ist.

Das korrekte Verwalten mehrerer Curl -Ressourcen kann die Programmstabilität und die Effizienz des Speicherverbrauchs erheblich verbessern.