Aktueller Standort: Startseite> Neueste Artikel> Wie kann ich curl_close verwenden, um mit curl_multi_exec für die Verarbeitung von Stapelanforderungen zusammenzuarbeiten?

Wie kann ich curl_close verwenden, um mit curl_multi_exec für die Verarbeitung von Stapelanforderungen zusammenzuarbeiten?

gitbox 2025-05-26

Bei einer großen Anzahl von HTTP -Anforderungen ist der von PHP bereitgestellte CURL_MULTI_EXEC ein gemeinsames Instrument zur Implementierung von gleichzeitigen Anforderungen. Viele Entwickler ignorieren jedoch ein Schlüsseldetail, wenn es verwendet wird: das richtige Zeitpunkt von curl_close . Wenn dies nicht ordnungsgemäß verwendet wird, führt dies nicht nur zu Ressourcenleckagen, sondern kann auch zu Problemen wie unvollständigen Anfragen und abnormalen Antworten führen. In diesem Artikel wird eingehend erläutert, wie die Funktion curl_close korrekt verwendet und mit CURL_MULTI_EXEC zusammenarbeitet, um eine effiziente und stabile Stapel -HTTP -Anforderungsverarbeitung zu erreichen.

1. Einführung in curl_multi_exec

curl_multi_exec ist eine der Funktionen, die in der PHP-Curl-Erweiterung bereitgestellt werden, sodass wir einem Curl-Multi-Handle mehrere Curl-Anforderungen hinzufügen und diese Anforderungen gleichzeitig auf nicht blockierende Weise ausführen können. Im Vergleich zu herkömmlichen seriellen Anfragen kann es die Verarbeitungseffizienz erheblich verbessern.

2. Methoden der gängigen falschen Nutzung

Viele Entwickler rufen sofort Curl_Close ($ CH) an, um Ressourcen nach der Bearbeitung einer Anfrage zu veröffentlichen, was falsch ist. In einem Parallelitätsmodell mit curl_multi_exec :

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

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

    // Falscher Weg:Rufen Sie hier nicht an curl_close
    // curl_close($ch);
}

3.. Verwenden Sie die Schritte

Der Prozess der korrekten Verwendung von CURL_MULTI_EXEC und CURL_CLOSE ist wie folgt:

  1. Initialisieren Sie den Multi -Griff;

  2. Erstellen Sie mehrere Curl -Handles und setzen Sie Optionen.

  3. Fügen Sie den Lockengriff zum Multi -Griff hinzu.

  4. Die Anfrage ausführen;

  5. Entfernen Sie die Griffe einzeln und rufen Sie Curl_Close auf;

  6. Schließen Sie den Multi -Griff.

Hier ist ein vollständiges und korrektes Beispiel:

 $urls = [
    'https://gitbox.net/api/endpoint1',
    'https://gitbox.net/api/endpoint2',
    'https://gitbox.net/api/endpoint3',
];

$mh = curl_multi_init();
$handles = [];
$responses = [];

// 1. Erstellen und konfigurieren Sie jeden curl Handhaben
foreach ($urls as $i => $url) {
    $ch = curl_init();
    curl_setopt_array($ch, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT => 10,
    ]);
    curl_multi_add_handle($mh, $ch);
    $handles[$i] = $ch;
}

// 2. Gleichzeitige Anfragen durchführen
$running = null;
do {
    $status = curl_multi_exec($mh, $running);
    if ($running) {
        curl_multi_select($mh);
    }
} while ($running && $status == CURLM_OK);

// 3. Lesen Sie die Antwort und reinigen Sie die Ressourcen
foreach ($handles as $i => $ch) {
    $responses[$i] = curl_multi_getcontent($ch);
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch); // Die richtige Zeit:existieren handle Schließen Sie nach dem Entfernen
}

curl_multi_close($mh);

// Optional:Verarbeitungsantwortdaten
foreach ($responses as $i => $body) {
    echo "Response #$i: " . substr($body, 0, 100) . PHP_EOL;
}

4. Schlüsseln zu beachten

  • Schließen Sie den Lockengriff nicht im Voraus . Sie müssen sicherstellen, dass die Anfrage ausgeführt und aus dem Multi -Griff entfernt wurde, bevor Sie Curl_Close aufrufen.

  • curl_multi_select ist der Schlüssel zur Verbesserung der Leistung und kann das Leerlauf von CPU verhindern.

  • Alle Griffe sollten am Ende ordnungsgemäß von curl_multi_remove_handle und curl_close freigegeben werden, ansonsten können Speicherlecks auftreten.

  • Wenn der verwendete URL -Domänenname festgelegt ist, kann er zentral durch einheitliche Konfiguration oder variable Austausch verwaltet werden, wie z. B.:

 $domain = 'gitbox.net';
$url = "https://{$domain}/api/endpoint";

V. Schlussfolgerung

Durch korrektes Verwalten des Verwendungszeitpunkts von curl_multi_exec und curl_close kann die Effizienz und Stabilität der HTTP -Anforderungsverarbeitung von PHP -Stapel erheblich verbessert werden. Dieser Prozess eignet sich besonders für Datenerfassung, API-Aggregation und andere Anwendungsszenarien mit hoher Konzriumenzdaten und ist eine Fähigkeit, die jeder PHP-Entwickler verdient, um zu beherrschen.