Start · Sprachen · PHP · Referenz · curl_multi_errno

curl_multi_errno

Funktion

Gibt die Fehlernummer (<code>errno</code>) der letzten fehlgeschlagenen cURL-Multihandle-Operation zurück.

seit PHP 7.1.0 Kategorie: http

Signatur

curl_multi_errno(CurlMultiHandle $multi_handle): int

Beschreibung

curl_multi_errno() liefert den internen Fehlercode, der nach einer fehlgeschlagenen Operation auf einem cURL-Multihandle gesetzt wurde. Der Rückgabewert ist eine der CURLM_*-Konstanten (z. B. CURLM_BAD_HANDLE, CURLM_CALL_MULTI_PERFORM etc.) oder CURLM_OK (0), wenn kein Fehler vorliegt.

Die Funktion ist das Multi-Handle-Pendant zu curl_errno() für einzelne Handles. Sie ergänzt curl_multi_strerror(), mit der sich die zugehörige menschenlesbare Fehlermeldung abfragen lässt. Üblicherweise wird sie eingesetzt, nachdem curl_multi_exec() oder eine andere Multi-Handle-Funktion einen Fehler signalisiert hat.

Typischer Einsatz: Fehlerbehandlung in asynchronen HTTP-Anfragen, bei denen mehrere Verbindungen gleichzeitig über ein cURL-Multihandle verwaltet werden. Der Fehlercode kann protokolliert oder zur Steuerung von Retry-Logik verwendet werden.

Parameter

Name Typ Default Beschreibung
$multi_handle Pflicht CurlMultiHandle Ein gültiges cURL-Multihandle, das zuvor mit curl_multi_init() erstellt wurde.

Rückgabewert

Typ
int
Beschreibung
Gibt eine CURLM_*-Fehlerkonstante zurück. 0 (CURLM_OK) bedeutet, dass kein Fehler vorliegt. Alle anderen Werte repräsentieren einen spezifischen Fehlercode der libcurl-Multihandle-Schicht.

Beispiele

Fehlercode nach curl_multi_exec auswerten

<?php
$mh = curl_multi_init();

$ch1 = curl_init('https://example.com');
$ch2 = curl_init('https://example.org');

curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch2, CURLOPT_RETURNTRANSFER, true);

curl_multi_add_handle($mh, $ch1);
curl_multi_add_handle($mh, $ch2);

$running = null;
do {
    $status = curl_multi_exec($mh, $running);

    if ($status !== CURLM_OK) {
        $errno  = curl_multi_errno($mh);
        $errmsg = curl_multi_strerror($errno);
        echo "cURL-Multi-Fehler #{$errno}: {$errmsg}" . PHP_EOL;
        break;
    }

    if ($running) {
        curl_multi_select($mh);
    }
} while ($running > 0);

$response1 = curl_multi_getcontent($ch1);
$response2 = curl_multi_getcontent($ch2);

curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
curl_close($ch1);
curl_close($ch2);

echo 'Antwort 1: ' . strlen($response1) . ' Bytes' . PHP_EOL;
echo 'Antwort 2: ' . strlen($response2) . ' Bytes' . PHP_EOL;
Antwort 1: 1256 Bytes Antwort 2: 648 Bytes

Fehlercode protokollieren und Fehlertext ausgeben

<?php
$mh = curl_multi_init();

// Absichtlich ungültige URL, um einen Fehler zu provozieren
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://this-domain-does-not-exist.invalid');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);

curl_multi_add_handle($mh, $ch);

$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);
} while ($running > 0);

$errno = curl_multi_errno($mh);
if ($errno !== CURLM_OK) {
    printf(
        'Multihandle-Fehler: [%d] %s' . PHP_EOL,
        $errno,
        curl_multi_strerror($errno)
    );
} else {
    // Einzelne Handle-Fehler prüfen
    $info = curl_multi_info_read($mh);
    if ($info && $info['result'] !== CURLE_OK) {
        printf(
            'Transfer-Fehler: [%d] %s' . PHP_EOL,
            $info['result'],
            curl_strerror($info['result'])
        );
    }
}

curl_multi_remove_handle($mh, $ch);
curl_multi_close($mh);
curl_close($ch);
Transfer-Fehler: [6] Could not resolve host

// Wichtig · Fallstricke

Hinweis zur Fehlerunterscheidung: curl_multi_errno() meldet nur Fehler auf der Multihandle-Ebene (z. B. Initialisierungsfehler). Fehler einzelner übertragener Verbindungen werden über curl_multi_info_read() und anschließend curl_errno() bzw. curl_strerror() abgefragt.

Verfügbarkeit: Die Funktion wurde mit PHP 7.1.0 eingeführt. In älteren PHP-Versionen steht sie nicht zur Verfügung; dort liefert curl_multi_exec() den Statuscode direkt als Rückgabewert.

Konstanten: Relevante CURLM_*-Konstanten sind u. a. CURLM_OK (0), CURLM_BAD_HANDLE (1), CURLM_BAD_EASY_HANDLE (2), CURLM_OUT_OF_MEMORY (3) und CURLM_INTERNAL_ERROR (4).