Signatur
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
$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);
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;
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);
// 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.