Aktueller Standort: Startseite> Neueste Artikel> So vermeiden Sie, dass falsche Anfragen vor curl_multi_close gesendet werden

So vermeiden Sie, dass falsche Anfragen vor curl_multi_close gesendet werden

gitbox 2025-05-12

Bei der Verwendung von PHP -Funktionen von CURL_MULTI_* für gleichzeitige Anfragen ist es einfach, einige ungültige oder falsche Anforderungen vor curl_multi_close () anzurufen, was zu verschwendeten Ressourcen und sogar Serverfehlern führt. Um sicherzustellen, dass alle Anforderungen gültig und korrekt sind, bevor Sie den Multi-Griff schließen, können Sie mit den folgenden Aspekten beginnen, um sie zu optimieren.

1. Überprüfen Sie streng jeden einzelnen Curl -Handle, bevor Sie eine Anforderung hinzufügen

Jede einzelne Curl -Anforderung (das durch curl_init initialisierte Handle) sollte vollständig überprüft werden, bevor sie zu curl_multi_add_handle hinzugefügt werden, z.

Beispielcode:

 function createCurlHandle(string $url): ?\CurlHandle
{
    if (!filter_var($url, FILTER_VALIDATE_URL)) {
        return null;
    }

    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); // Timeout einstellen
    return $ch;
}

2. Überwachen Sie den Ausführungsstatus von curl_multi_exec korrekt

Während der Ausführung von Multi-Threaded ist es notwendig, den Ausführungsstatus zu durchlaufen, um sicherzustellen, dass alle Griffe korrekt reagieren, anstatt die Verbindung blind schnell zu schließen.

Beispiel:

 $urls = [
    "https://gitbox.net/api/data1",
    "https://gitbox.net/api/data2",
    "https://gitbox.net/api/data3"
];

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

foreach ($urls as $url) {
    $ch = createCurlHandle($url);
    if ($ch !== null) {
        curl_multi_add_handle($multiHandle, $ch);
        $curlHandles[] = $ch;
    }
}

$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);
    if ($status > CURLM_OK) {
        // Aufzeichnungsfehler,Oder nach Bedarf unterbrechen
        break;
    }
    // erlaubenCPUEine Pause machen
    curl_multi_select($multiHandle);
} while ($running > 0);

3. Überprüfen Sie den Rückgabestatus jeder Anfrage, bevor Sie den Handle schließen

Bevor Sie formell curl_multi_close () aufrufen, sollten Sie alle einzelnen Handles durchqueren, ihren Rückgabecode ( curlinfo_http_code ) und andere Informationen bestätigen und entscheiden, ob Sie es erneut versuchen oder als fehlgeschlagen markieren müssen.

 foreach ($curlHandles as $ch) {
    $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    if ($httpCode !== 200) {
        // Ausnahmen behandeln,Zum Beispiel Protokollierung、Anfrage neu einstellen, etc.
        echo "Anfrage fehlgeschlagen,HTTPStatuscode:" . $httpCode . PHP_EOL;
    }
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

curl_multi_close($multiHandle);

4. Zusammenfassung

In einem Szenario, in dem mehrere Anforderungen entgegengebracht werden, ist es äußerst wichtig, jeden Lebenszyklus für Anforderungen korrekt zu verwalten. Diese Reihe von Schritten können streng überprüfende Parameter aus der Initialisierungsphase, die den Status während der Ausführung während der Ausführung und die gründliche Überprüfung des Rückgabewerts vor dem Ende über die Überprüfung des Rückgabewerts durch falsche Anforderungen minimieren. Durch die rationalere Verwendung von curl_multi_select () mit Ausnahmebehandlungsmechanismus können Ihre Curl_Multi -Aufrufe sowohl effizient als auch stabil sein, wodurch die Zuverlässigkeit des Gesamtsystems verbessert wird.