Start · Sprachen · PHP · Referenz · curl_getinfo

curl_getinfo

Funktion

Gibt Informationen über den letzten abgeschlossenen cURL-Transfer zurück, wahlweise alle oder nur eine bestimmte Kenngröße.

seit PHP 4.0.4 Kategorie: http

Signatur

curl_getinfo(CurlHandle $handle, ?int $option = null): mixed

Beschreibung

curl_getinfo() liefert Metadaten zu einem abgeschlossenen cURL-Transfer, z. B. den HTTP-Statuscode, die effektive URL nach Weiterleitungen, Übertragungszeiten, Dateigrößen und DNS-Auflösungszeiten. Die Funktion wird typischerweise nach curl_exec() aufgerufen, um den Erfolg einer Anfrage zu prüfen oder Diagnose-Informationen zu sammeln.

Wird $option weggelassen oder auf null gesetzt, gibt die Funktion ein assoziatives Array mit allen verfügbaren Informationen zurück. Wird eine der CURLINFO_*-Konstanten übergeben, erhält man gezielt nur den zugehörigen Wert, was in performance-kritischen Pfaden sinnvoll ist.

Nützliche Konstanten sind unter anderem: CURLINFO_HTTP_CODE (HTTP-Statuscode), CURLINFO_EFFECTIVE_URL (tatsächlich aufgerufene URL nach Weiterleitungen), CURLINFO_TOTAL_TIME (Gesamtdauer in Sekunden), CURLINFO_CONTENT_TYPE (MIME-Typ der Antwort) und CURLINFO_SIZE_DOWNLOAD (Größe der heruntergeladenen Daten in Bytes).

Ab PHP 8.0 akzeptiert die Funktion statt einer Ressource ein CurlHandle-Objekt. Vor PHP 8.0 wurde ein via curl_init() erzeugtes Ressource-Handle übergeben.

Parameter

Name Typ Default Beschreibung
$handle Pflicht CurlHandle Ein gültiges cURL-Handle, das zuvor mit curl_init() erstellt wurde.
$option int|null null Eine CURLINFO_*-Konstante, die angibt, welche einzelne Information abgerufen werden soll. Wird null übergeben (Standard), gibt die Funktion ein Array mit allen Informationen zurück.

Rückgabewert

Typ
mixed
Beschreibung
Ohne $option ein assoziatives Array mit allen Transfer-Informationen. Mit einer CURLINFO_*-Konstante den zugehörigen Wert (z. B. int, float oder string). Bei einem Fehler wird false zurückgegeben.

Beispiele

HTTP-Statuscode und effektive URL nach einer GET-Anfrage prüfen

<?php
$ch = curl_init('https://httpbin.org/get');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

$body = curl_exec($ch);

if ($body === false) {
    echo 'cURL-Fehler: ' . curl_error($ch);
} else {
    $httpCode    = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $effectiveUrl = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);
    $totalTime   = curl_getinfo($ch, CURLINFO_TOTAL_TIME);

    echo 'HTTP-Status: ' . $httpCode . PHP_EOL;
    echo 'Effektive URL: ' . $effectiveUrl . PHP_EOL;
    echo 'Gesamtdauer: ' . number_format($totalTime, 4) . ' s' . PHP_EOL;
}

curl_close($ch);
HTTP-Status: 200 Effektive URL: https://httpbin.org/get Gesamtdauer: 0.3521 s

Alle Transferinformationen als Array ausgeben

<?php
$ch = curl_init('https://example.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);

// Alle verfügbaren Informationen auf einmal abrufen
$info = curl_getinfo($ch);
curl_close($ch);

echo 'HTTP-Code: '       . $info['http_code']       . PHP_EOL;
echo 'Content-Type: '    . $info['content_type']    . PHP_EOL;
echo 'Download-Größe: '  . $info['size_download']   . ' Bytes' . PHP_EOL;
echo 'DNS-Lookup: '      . $info['namelookup_time'] . ' s' . PHP_EOL;
echo 'Verbindungsaufbau: ' . $info['connect_time']  . ' s' . PHP_EOL;
HTTP-Code: 200 Content-Type: text/html; charset=UTF-8 Download-Größe: 1256 Bytes DNS-Lookup: 0.0123 s Verbindungsaufbau: 0.0456 s

Weiterleitungen zählen und finale URL bestimmen

<?php
$ch = curl_init('http://github.com'); // HTTP → wird zu HTTPS weitergeleitet
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_MAXREDIRS, 5);

curl_exec($ch);

$redirectCount = curl_getinfo($ch, CURLINFO_REDIRECT_COUNT);
$finalUrl      = curl_getinfo($ch, CURLINFO_EFFECTIVE_URL);

echo 'Anzahl Weiterleitungen: ' . $redirectCount . PHP_EOL;
echo 'Finale URL: ' . $finalUrl . PHP_EOL;

curl_close($ch);
Anzahl Weiterleitungen: 1 Finale URL: https://github.com/

// Wichtig · Fallstricke

Timing-Reihenfolge: Die Zeit-Felder (namelookup_time, connect_time, pretransfer_time, starttransfer_time, total_time) sind kumulative Werte ab dem Start der Anfrage, nicht Differenzen.

Aufrufzeitpunkt: curl_getinfo() sollte vor curl_close() aufgerufen werden, da das Schließen des Handles alle zugehörigen Metadaten freigibt.

Wiederverwendete Handles: Bei der Verwendung von curl_reset() oder bei mehrfacher Ausführung mit demselben Handle werden die Informationen durch den nächsten curl_exec()-Aufruf überschrieben. Werte nach Bedarf zwischenspeichern.

CURLINFO_PRIVATE: Mit CURLOPT_PRIVATE kann ein eigener String am Handle gespeichert und später via CURLINFO_PRIVATE wieder abgerufen werden – nützlich zur Identifikation in Multi-cURL-Szenarien.