Aktueller Standort: Startseite> Neueste Artikel> Wie verwaltet und verarbeitet ich die Rückgabedaten mehrerer Curl -Anforderungen effektiv in curl_multi_info_read?

Wie verwaltet und verarbeitet ich die Rückgabedaten mehrerer Curl -Anforderungen effektiv in curl_multi_info_read?

gitbox 2025-06-19

In PHP bietet die Funktion curl_multi_* eine effiziente Möglichkeit, mehrere HTTP -Anforderungen gleichzeitig zu senden. Insbesondere die Funktion curl_multi_info_read , die uns hilft, ihre Rückgabedaten bei der Initiierung mehrerer Curl -Anforderungen zu verwalten und zu verarbeiten. In diesem Artikel wird detailliert untersucht, wie die Rückgabedaten mehrerer Curl -Anforderungen vollständig verwaltet und verarbeitet werden, wenn Sie curl_multi_info_read verwenden, um Effizienz und Genauigkeit sicherzustellen.

1. Hintergrundeinführung

In PHP liefert die Curl -Erweiterung reichhaltige APIs für HTTP -Anforderungen. Wenn Sie mehrere HTTP -Anforderungen einleiten müssen, wird die Funktion curl_multi_* normalerweise verwendet, um diese Anforderungen parallel auszuführen. curl_multi_exec wird verwendet, um mehrere Anforderungen auszuführen, während curl_multi_info_read verwendet wird, um Ausführungsinformationen jeder Anforderung und deren Rückgabedaten zu erhalten.

2. Wie kann man curl_multi_* Funktion verwenden?

Initialisieren Sie zuerst einen Multi-Curl-Handle mit curl_multi_init () und dann ein separates Curl-Handle für jede Anforderung und fügen Sie sie dem Multi-Courl-Griff hinzu. Hier ist ein einfaches Beispiel:

 <?php
// Initialisieren Sie mehr als eine cURL Handhaben
$multiCurl = curl_multi_init();

// Erstellen Sie mehrere getrennte cURL fragenHandhaben
$curlHandles = [];
$urls = ['https://gitbox.net/api/data1', 'https://gitbox.net/api/data2', 'https://gitbox.net/api/data3'];

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

// Eine Anfrage ausführen
do {
    $status = curl_multi_exec($multiCurl, $active);
    if ($active) {
        // Warten Sie, bis die Veranstaltung abgeschlossen ist
        curl_multi_select($multiCurl);
    }
} while ($active && $status == CURLM_OK);

// Verarbeiten Sie die Ergebnisse jeder Anfrage
foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    // Verarbeitungsrückgabedaten
    echo $response . PHP_EOL;
    // 关闭Handhaben
    curl_multi_remove_handle($multiCurl, $ch);
    curl_close($ch);
}

// Viele schließen cURL Handhaben
curl_multi_close($multiCurl);
?>

Im obigen Code fügen wir jeden Curl -Anforderungspalle zum Multi -Curl -Handle $ multicurl über curl_multi_add_handle hinzu und führen diese Anforderungen gleichzeitig über curl_multi_exec aus.

3. Verwenden Sie CURL_MULTI_INFO_READ , um den Anforderungsstatus zu erhalten

Die Funktion curl_multi_info_read wird verwendet, um die Rückgabeinformationen für jede Anforderung von einem Multi-Curl-Handle zu erhalten. Durch diese Funktion können wir den Ausführungsstatus der Anforderung, die Fehlerinformationen und den Rückgabeinhalt der Anforderung erhalten. Hier erfahren Sie, wie Sie die zurückgegebenen Daten für mehrere Anforderungen verwalten und verarbeiten können:

 <?php
// Angenommen, viele wurden initialisiert und ausgeführt cURL fragen(Siehe oben)

// 获取每个fragen的执行信息
while ($done = curl_multi_info_read($multiCurl)) {
    // 获取fragen状态
    $status = $done['result'];
    $ch = $done['handle'];

    if ($status === CURLE_OK) {
        // fragen成功
        $response = curl_multi_getcontent($ch);
        echo "fragen成功,Daten zurückgeben: " . $response . PHP_EOL;
    } else {
        // fragen失败
        echo "fragen失败,Fehlermeldung:" . curl_error($ch) . PHP_EOL;
    }

    // 移除已完成的Handhaben
    curl_multi_remove_handle($multiCurl, $ch);
    curl_close($ch);
}

// Viele schließen cURL Handhaben
curl_multi_close($multiCurl);
?>

In diesem Beispiel verwenden wir curl_multi_info_read , um die Rückgabeinformationen für jede Anfrage zu erhalten. Wenn die Anfrage erfolgreich ist, erhalten wir die zurückgegebenen Daten über curl_multi_getContent . Andernfalls werden wir die Fehlermeldung ausdrucken.

4. Wie können Sie mit den angeforderten Rückgabedaten umgehen?

Wenn mehrere Anforderungen parallel ausgeführt werden, können die Rückgabedaten jeder Anforderung eine andere Struktur oder einen anderen Inhalt haben. Bei der Verarbeitung der zurückgegebenen Daten müssen wir daher die folgenden Aspekte berücksichtigen:

  1. Einheit der Datenformate : Stellen Sie sicher, dass die von allen Anfragen zurückgegebenen Daten konsistent sind, sodass es einfacher zu verarbeiten ist. Sie können beispielsweise in Betracht ziehen, die zurückgegebenen Daten in das JSON -Format zu konvertieren und sie einheitlich zu analysieren.

  2. Fehlerbehandlung : Für jede Anfrage muss der Anforderungsfehler behandelt werden. Curl_multi_info_read kann die angeforderten Fehlerinformationen erhalten, um Probleme zu debuggen und zu analysieren.

  3. Asynchrone Datenverarbeitung : In einigen Fällen müssen die zurückgegebenen Daten weiter asynchron verarbeitet werden, z. In diesem Fall kann das Warteschlangensystem verwendet oder die Daten im Cache gespeichert und später verarbeitet werden.

Im Folgenden finden Sie ein Beispiel, das die Verarbeitung und Fehlerverarbeitung von Datenformaten kombiniert:

 <?php
// Angenommen, dass mehrere Hinrichtungen durchgeführt wurden cURL fragen并获取了Daten zurückgeben

while ($done = curl_multi_info_read($multiCurl)) {
    $ch = $done['handle'];
    $status = $done['result'];

    // 检查fragen是否成功
    if ($status === CURLE_OK) {
        $response = curl_multi_getcontent($ch);
        // Angenommen, die zurückgegeben JSON Daten
        $data = json_decode($response, true);

        if ($data === null) {
            echo "Analyse JSON Daten失败:" . json_last_error_msg() . PHP_EOL;
        } else {
            // 处理Daten
            echo "成功获取Daten:" . print_r($data, true) . PHP_EOL;
        }
    } else {
        // fragen失败,输出Fehlermeldung
        echo "fragen失败,Fehlermeldung:" . curl_error($ch) . PHP_EOL;
    }

    // 移除并关闭Handhaben
    curl_multi_remove_handle($multiCurl, $ch);
    curl_close($ch);
}

curl_multi_close($multiCurl);
?>

In diesem Code analysieren wir die zurückgegebenen JSON -Daten über JSON_DECODE und verarbeiten den Parsing -Fehler.

5. Vorschläge zur Leistungsoptimierung

Obwohl die Funktion curl_multi_* in einer Umgebung mit hoher Parallelität bereits parallele Anforderungen zulässt, müssen wir die folgenden Optimierungsmaßnahmen in Betracht ziehen:

  • Batch -Anfragen : Anfragen in Stapeln senden, anstatt alle Anfragen gleichzeitig zu senden, wodurch übermäßige gleichzeitige Anfragen vermieden werden, die zu Erschöpfung oder Leistungsverschlechterung führen.

  • Zeitüberschreitungseinstellung anfordern : Legen Sie geeignete Zeitlimitgrenzen fest, um zu verhindern, dass eine Anforderung die Ausführung anderer Anforderungen blockiert und beeinträchtigt. Verwenden Sie Curlopt_timeout oder curlopt_timeout_ms, um das Anforderungszeitlimit festzulegen.

  • Verbindungspooling : Verwenden des Verbindungs ​​-Multiplexing -Mechanismus von Curl reduziert er den Overhead der wiederholten Herstellung von Verbindungen. Sie können die Verbindungsmultiplexing optimieren, indem Sie Curlopt_forbid_Reuse und curlopt_fresh_connect einstellen.

6. Zusammenfassung

Mit CURL_MULTI_INFO_READ UND CURL_MULTI_* -Funktionen kann PHP mehrere parallele HTTP -Anforderungen sehr effizient verwalten und verarbeiten. In praktischen Anwendungen sollten wir uns nicht nur auf die parallele Ausführung von Anforderungen konzentrieren, sondern auch die zurückgegebenen Daten effektiv verarbeiten, um die Zuverlässigkeit und Leistung der Verarbeitung sicherzustellen.

Hoffentlich hilft Ihnen dieser Artikel besser zu verstehen, wie Sie in PHP curl_multi_info_read verwenden, um mehrere Anforderungen zu verwalten und ihre Rückgabedaten zu verarbeiten.

  • Verwandte Tags:

    cURL