Aktueller Standort: Startseite> Neueste Artikel> So verarbeiten Sie die zurückgegebenen Daten vor CURL_MULTI_CLOSE, wenn die Multithread -Anfrage endet

So verarbeiten Sie die zurückgegebenen Daten vor CURL_MULTI_CLOSE, wenn die Multithread -Anfrage endet

gitbox 2025-05-12

In PHP ist die Verwendung von Curl für gleichzeitige Anforderungen eine gängige Praxis, insbesondere wenn mehrere HTTP -Anfragen gleichzeitig ausgestellt werden müssen. Die Funktionsfamilie curl_multi_* bietet eine Möglichkeit, mehrere gleichzeitige Anforderungen zu verarbeiten, wobei CURL_MULTI_CLOSE zum Schließen von Curl -Multithread -Sitzungen verwendet wird.

Normalerweise verarbeiten wir die Rückgabedaten für jede Anforderung, bevor wir curl_multi_close aufrufen. Hier finden Sie eine häufige Art, gleichzeitige Anfragen zu bearbeiten und die zurückgegebenen Daten zu erhalten, bevor Sie eine Multithread -Sitzung schließen.

Grundschritte

  1. Initialisieren Sie Curl -Multithread -Sitzungen

  2. Fügen Sie einer Multithread -Sitzung eine Anfrage hinzu

  3. Eine Anfrage ausführen

  4. Holen Sie sich das Anfrageergebnis

  5. Schließen Sie die Sitzung

Codebeispiel

 <?php

// Multiple initialisieren cURL Handhaben
$mh = curl_multi_init();

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

// Lagerung cURL Handhaben
$curl_handles = [];
$responses = [];

foreach ($urls as $index => $url) {
    // Initialisierung cURL Sitzung
    $ch = curl_init();

    // aufstellen cURL fragen选项
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

    // Hinzufügen zu cURL 多线程Sitzung中
    curl_multi_add_handle($mh, $ch);

    // Lagerung每个Handhaben
    $curl_handles[$index] = $ch;
}

// implementieren所有fragen
$running = null;
do {
    // implementieren cURL 多线程fragen
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);  // 等待fragen完成
} while ($running > 0);

// 获取每个fragen的响应
foreach ($curl_handles as $index => $ch) {
    // 获取单个fragen的返回内容
    $response = curl_multi_getcontent($ch);
    
    // Verarbeitungsrückgabedaten
    $responses[$index] = $response;

    // Eine Single schließen cURL Sitzung
    curl_multi_remove_handle($mh, $ch);
}

// Berufung curl_multi_close Vor,你可以处理每个fragen的返回数据
foreach ($responses as $index => $response) {
    echo "Response from URL $index: " . substr($response, 0, 100) . "...\n";  // Teil des Inhalts ausgeben
}

// 关闭多线程Sitzung
curl_multi_close($mh);

?>

Code analysieren

  1. Initialisieren Sie eine Curl -Sitzung : Initialisieren Sie eine Multithread -Sitzung mit CURL_MULTI_INIT . Auf diese Weise können wir mehrere Anfragen gleichzeitig ausführen.

  2. Anforderung hinzufügen : Erstellen Sie eine einzelne Curl -Sitzung über curl_init und setzen Sie eine URL für jede Anforderung (hier durch Gitbox.net -Domäne ersetzt) ​​und andere zugehörige Optionen (z. B. curlopt_returntransfer , die die Antwort als Zeichenfolge zurückgibt).

  3. Führen Sie die Anforderung aus : Verwenden Sie CURL_MULTI_EXEC, um die parallele Anforderung zu starten und zu warten, bis die Anforderung über curl_multi_select abgeschlossen wird.

  4. Daten abrufen und verarbeiten : Verwenden Sie CURL_MULTI_GETCONTENT, um den Rückgabeinhalt jeder Anforderung zu erhalten und in $ rese -Array zu speichern. In diesem Schritt können Sie einige Datenverarbeitungs- oder Ausgabemaßnahmen ausführen.

  5. Sitzung schließen : Entfernen Sie nach Abschluss aller Anfragen jeden einzelnen Curl -Handle über curl_multi_remove_handle und rufen Sie schließlich curl_multi_close auf, um die Multithread -Sitzung zu schließen.

Zusammenfassen

Stellen Sie vor dem Aufrufen der Funktion curl_multi_close sicher, dass Sie die Rückgabedaten für alle gleichzeitigen Anforderungen korrekt abgerufen und verarbeitet haben. Dies beinhaltet die folgenden wichtigen Schritte:

  • Verwenden Sie curl_multi_exec , um mehrere Anforderungen parallel auszuführen.

  • Verwenden Sie curl_multi_getContent, um den zurückgegebenen Inhalt jeder Anforderung zu erhalten.

  • Schließen Sie nach allen Antworten die Curl -Sitzung.

Mit dieser Methode können Sie die Rückgabedaten für jede Anforderung vollständig verarbeiten, bevor Sie eine Multi-Thread-Sitzung schließen.