Signatur
Beschreibung
http_get_last_response_headers() gibt die HTTP-Antwort-Header zurück, die bei der zuletzt durchgeführten HTTP-Anfrage vom Server empfangen wurden. Die Header werden als indiziertes Array von Zeichenketten geliefert, wobei jedes Element einen einzelnen Header-Eintrag im Format Name: Wert enthält.
Diese Funktion ist besonders nützlich, wenn HTTP-Anfragen über Wrapper wie file_get_contents() mit einem HTTP-Kontext-Stream durchgeführt werden. Nach dem Aufruf lassen sich die empfangenen Header auswerten, um z. B. den HTTP-Statuscode, Content-Type, Weiterleitungen oder Caching-Informationen zu prüfen.
Die Funktion ist eine Alternative zum manuellen Auslesen der globalen Variable $http_response_header, die PHP nach einem HTTP-Stream-Aufruf automatisch befüllt. Im Unterschied dazu ist http_get_last_response_headers() kontextunabhängig und kann aus beliebigen Gültigkeitsbereichen (Scopes) heraus aufgerufen werden, ohne dass die Variable explizit übergeben werden muss.
Sind seit dem Start des Skripts noch keine HTTP-Anfragen über einen PHP-Stream-Wrapper erfolgt oder wurden die Header zurückgesetzt, gibt die Funktion false zurück.
Rückgabewert
Name: Wert, wobei das erste Element typischerweise die HTTP-Statuszeile (z. B. HTTP/1.1 200 OK) enthält. Gibt false zurück, wenn noch keine HTTP-Anfrage stattgefunden hat oder keine Header verfügbar sind.Beispiele
HTTP-Statuscode nach file_get_contents() ermitteln
<?php
$url = 'https://www.example.com';
$body = file_get_contents($url);
$headers = http_get_last_response_headers();
if ($headers !== false) {
// Erste Zeile enthält den HTTP-Status
$statusLine = $headers[0];
echo 'Statuszeile: ' . $statusLine . PHP_EOL;
// Alle Header ausgeben
foreach ($headers as $header) {
echo $header . PHP_EOL;
}
} else {
echo 'Keine Header verfügbar.';
}
Content-Type eines Remote-Dokuments prüfen
<?php
function getRemoteContentType(string $url): string|false {
file_get_contents($url);
$headers = http_get_last_response_headers();
if ($headers === false) {
return false;
}
foreach ($headers as $header) {
if (stripos($header, 'Content-Type:') === 0) {
return trim(substr($header, strlen('Content-Type:')));
}
}
return false;
}
$contentType = getRemoteContentType('https://www.example.com');
if ($contentType !== false) {
echo 'Content-Type: ' . $contentType . PHP_EOL;
} else {
echo 'Content-Type nicht gefunden.';
}
// Wichtig · Fallstricke
Verfügbarkeit: http_get_last_response_headers() wurde in PHP 8.4.0 eingeführt und ist im Standard-PHP-Kern enthalten. Für ältere PHP-Versionen muss auf die automatisch gesetzte Variable $http_response_header zurückgegriffen werden, die jedoch nur im lokalen Gültigkeitsbereich des Aufrufs sichtbar ist.
Scope-Problem mit $http_response_header: Im Gegensatz zur globalen Variable $http_response_header, die nur im Scope des direkten Aufrufs existiert, kann http_get_last_response_headers() auch aus verschachtelten Funktionen und Klassen heraus aufgerufen werden, ohne die Variable als Parameter weiterzureichen.
Sicherheitshinweis: Vertrauen Sie den empfangenen Headern nicht blind. Bei der Verarbeitung externer Daten sollten Header-Werte stets validiert und bereinigt werden, bevor sie in weiteren Operationen (z. B. Datenbankabfragen oder Ausgaben) verwendet werden.