Aktueller Standort: Startseite> Neueste Artikel> Best Practices für die Verwendung von curl_exec und curl_multi_close

Best Practices für die Verwendung von curl_exec und curl_multi_close

gitbox 2025-05-29

In der Entwicklung müssen wir häufig HTTP -Anforderungen an mehrere Server oder APIs einleiten. Wenn Sie nach der herkömmlichen Einzel-Threading-Methode nacheinander anfordern, ist dies nicht nur langsam, sondern auch Server-Ressourcen. PHP liefert eine Curl- Erweiterung, wobei die Funktionen curl_multi_exec und curl_multi_close es uns ermöglichen können, eine gleichzeitige Verarbeitung mit mehreren Anforderungen zu implementieren, wodurch die Effizienz erheblich verbessert wird.

In diesem Artikel wird detailliert eingeführt, wie Sie curl_exec in Kombination mit curl_multi_close für eine effiziente Parallelitätsverarbeitung verwenden und einen spezifischen Beispielcode angeben.

Grundkonzepte

  • Curl_exec () : Führen Sie eine einzelne Curl -Anforderung aus.

  • curl_multi_exec () : Führen Sie mehrere Curl -Handles gleichzeitig aus.

  • curl_multi_close () : Schließen Sie ein Curl -Batch -Handle und geben Sie die Ressource frei.

Wenn Sie eine große Anzahl von Anfragen gleichzeitig bearbeiten müssen, wird empfohlen, Curl_Multi_exec zu verwenden, anstatt für jede Anforderung separat auf Curl_exec aufzurufen. curl_multi_close ist ein wichtiger Schritt, um Ressourcen zu bereinigen, nachdem alle Anfragen bearbeitet wurden.

Beispielcode

Hier ist ein einfaches Beispiel, das zeigt, wie mehrere Schnittstellen gleichzeitig anfordern und Antworten verarbeiten:

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

// Multiple initialisierencURLHandhaben
$multiHandle = curl_multi_init();
$curlHandles = [];

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

// Führen Sie alle Anfragen aus
$running = null;
do {
    $status = curl_multi_exec($multiHandle, $running);
    if ($status > 0) {
        // Ein Fehler ist aufgetreten
        echo "cURL error: " . curl_multi_strerror($status);
        break;
    }
    // Warten auf eine aktive Verbindung
    curl_multi_select($multiHandle);
} while ($running > 0);

// Verarbeiten Sie die Antwort jeder Anfrage
foreach ($curlHandles as $ch) {
    $response = curl_multi_getcontent($ch);
    $info = curl_getinfo($ch);
    if (curl_errno($ch)) {
        echo 'Request Error: ' . curl_error($ch) . PHP_EOL;
    } else {
        echo 'HTTP Code: ' . $info['http_code'] . PHP_EOL;
        echo 'Response: ' . $response . PHP_EOL;
    }
    curl_multi_remove_handle($multiHandle, $ch);
    curl_close($ch);
}

// Schließungmulti handle
curl_multi_close($multiHandle);
?>

veranschaulichen

  • Erstellen Sie zunächst einen Multi-Griff über curl_multi_init () .

  • Fügen Sie nach dem separaten Einstellen jeder Locken den Multi -Handle über curl_multi_add_handle () hinzu.

  • Verwenden Sie curl_multi_exec () , um alle Anforderungen auszuführen, und die Umfragen, bis alle Anforderungen abgeschlossen sind.

  • curl_multi_select () kann die CPU -Müßigkeit verringern und die Effizienz verbessern.

  • Verwenden Sie nach Abschluss der Anforderung curl_multi_getContent () , um den Antwortinhalt zu erhalten.

  • Denken Sie schließlich daran, curl_multi_remove_handle () zu verwenden, um das Handle zu entfernen und das Multi -Handle mit CURL_MULTI_CLOSE () zu schließen, um die Ressource freizugeben.

Dinge zu beachten

  • Anzahl der gleichzeitigen : Wenn zu viele URLs für einmalige Anfragen vorhanden sind, wird empfohlen, sie in Chargen zu verarbeiten, z.

  • Timeout-Handhabung : curlopt_timeout oder curlopt_connectTimeout kann festgelegt werden, um langfristige Hänge einiger Anfragen zu vermeiden.

  • Fehlerbehandlung : Verwenden Sie Curl_errno () und curl_error (), um zu überprüfen, ob eine einzelne Anforderung fehlerfrei ist.

  • Verbindungswiederverwendung : Das Einschalten von curlopt_forbid_reuse kann eine häufige Erstellung von TCP -Verbindungen vermeiden und die Leistung verbessern.

Zusammenfassen

Durch die Kombination von Curl_exec und curl_multi_close können wir eine große Anzahl von HTTP -Anforderungen in PHP effizient verarbeiten. Diese Methode verkürzt nicht nur die Anforderungszeit, sondern nutzt auch die Parallelitätsfunktionen des Servers voll. Es ist eine der wesentlichen Fähigkeiten, um Hochleistungs-PHP-Anwendungen aufzubauen.

Durch die Beherrschung dieser Grundlagen können Sie Ihre PHP -Anwendung schneller und stabiler machen!