Aktueller Standort: Startseite> Neueste Artikel> Wie benutze ich curl_close, um mehrere Curl -Ressourcen in PHP zu veröffentlichen?

Wie benutze ich curl_close, um mehrere Curl -Ressourcen in PHP zu veröffentlichen?

gitbox 2025-05-18

Wenn Sie mehrere Curl -Anforderungen gleichzeitig ausführen müssen, können Sie die Funktion curl_multi_exec () verwenden. Mit dieser Funktion können mehrere Curl -Sitzungen gleichzeitig ausgeführt und mit einem Mehrfachgriff verwaltet werden.

Hier ist ein grundlegendes Beispiel, das zeigt, wie man curl_multi_exec () verwendet, um mehrere Curl -Anforderungen zu verarbeiten:

 <?php
// Multiple erstellen cURL Handhaben
$ch1 = curl_init("https://gitbox.net/api/data1");
$ch2 = curl_init("https://gitbox.net/api/data2");
$ch3 = curl_init("https://gitbox.net/api/data3");

// Erstellen a cURL 多Handhaben
$multi_handle = curl_multi_init();

// Setzen Sie eine Single ein cURL Handhaben加入到多Handhaben中
curl_multi_add_handle($multi_handle, $ch1);
curl_multi_add_handle($multi_handle, $ch2);
curl_multi_add_handle($multi_handle, $ch3);

// Multiple ausführen cURL fragen
$running = null;
do {
    curl_multi_exec($multi_handle, $running);
} while ($running > 0);

// Schließen Sie jeden Einzelnen cURL Handhaben
curl_multi_remove_handle($multi_handle, $ch1);
curl_multi_remove_handle($multi_handle, $ch2);
curl_multi_remove_handle($multi_handle, $ch3);

// Schließung多Handhaben
curl_multi_close($multi_handle);

In diesem Beispiel erstellen wir drei Curl -Anforderungen und führen sie gleichzeitig über curl_multi_exec () aus. Beachten Sie, dass curl_multi_exec (), obwohl sie gleichzeitig mehrere Anforderungen ausführen können, dennoch curl_multi_remove_handle () und curl_multi_close () verwenden müssen, um sicherzustellen, dass die Ressourcen ordnungsgemäß veröffentlicht werden.

2. Verwenden Sie curl_close korrekt, um Ressourcen freizugeben

Nachdem jede Curl -Anforderung ausgeführt wurde, sollte die Funktion curl_close () verwendet werden, um die entsprechende Ressource freizugeben. Obwohl curl_multi_close () die gesamte Multi-Griff-Verbindung schließt, schließt sie nicht automatisch einen separaten Curl-Handle. Daher müssen wir nach Abschluss des Multitasking -Vorgangs jeden Curl -Griff manuell schließen. Wenn diese Ressourcen nicht korrekt freigegeben werden, können Speicherlecks auftreten.

Hier ist der verbesserte Code, mit dem Curl_Close () für jeden Curl -Handle korrekt verwendet wird:

 <?php
// Multiple erstellen cURL Handhaben
$ch1 = curl_init("https://gitbox.net/api/data1");
$ch2 = curl_init("https://gitbox.net/api/data2");
$ch3 = curl_init("https://gitbox.net/api/data3");

// Erstellen a cURL 多Handhaben
$multi_handle = curl_multi_init();

// Setzen Sie eine Single ein cURL Handhaben加入到多Handhaben中
curl_multi_add_handle($multi_handle, $ch1);
curl_multi_add_handle($multi_handle, $ch2);
curl_multi_add_handle($multi_handle, $ch3);

// Multiple ausführen cURL fragen
$running = null;
do {
    curl_multi_exec($multi_handle, $running);
} while ($running > 0);

// Schließen Sie jeden Einzelnen cURL Handhaben
curl_close($ch1);
curl_close($ch2);
curl_close($ch3);

// Schließung多Handhaben
curl_multi_close($multi_handle);

Auf diese Weise stellen wir sicher, dass nach Abschluss jeder Curl -Anfrage die entsprechenden Ressourcen rechtzeitig veröffentlicht werden können.

3.. Best Practices, um Speicherlecks zu vermeiden

  1. Ressourcen rechtzeitig veröffentlicht : Nachdem alle Curl -Anfragen abgeschlossen sind, rufen Sie unbedingt curl_close () auf, um jede einzelne Curl -Ressource freizugeben und am Ende mehrere Griffe zu schließen.

  2. Richtige Fehlerbehandlung : In den tatsächlichen Projekten können Netzwerkanfragen fehlschlagen, was dazu führt, dass einige Curl -Handles nicht ordnungsgemäß geschlossen werden. Sie können einen Fehlerbehandlungsmechanismus hinzufügen, um sicherzustellen, dass die Ressource freigegeben werden kann, unabhängig davon, ob die Anfrage erfolgreich ist oder nicht. Zum Beispiel:

     if ($ch1) {
        // 如果fragen成功,Schließung cURL Ressource
        curl_close($ch1);
    }
    
  3. Überwachungsverwendung überwachen : Wenn Sie mehrere gleichzeitige Curl -Anforderungen bearbeiten, können Sie die Speicherverwendung von PHP überwachen, um sicherzustellen, dass keine Speicherlecks auftreten. In einigen komplexen Anwendungen kann die Verwendung von gc_collect_cycles () rechtzeitig auch dazu beitragen, das Recycling von PHP -Speichermüll zu erzwingen, die den Speicherverbrauch zu verringern.

  4. Begrenzen Sie die Anzahl der gleichzeitigen Anforderungen : Obwohl curl_multi_exec () gleichzeitig mehrere Anforderungen ausführen kann, können übermäßige gleichzeitige Anforderungen zu übermäßigem Konsum von Systemressourcen führen. In praktischen Anwendungen kann die Anzahl der gleichzeitigen Anfragen angemessen beschränkt sein, um übermäßige Curl -Anfragen zu vermeiden, dass zu viel Speicher einbezogen wird.