Start · Sprachen · PHP · Referenz · http_get_last_response_headers

http_get_last_response_headers

Funktion

Ruft die HTTP-Antwort-Header der zuletzt ausgeführten HTTP-Anfrage als Array ab.

Kategorie: http

Signatur

http_get_last_response_headers(): array|false

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

Typ
array|false
Beschreibung
Gibt ein indiziertes Array mit den HTTP-Antwort-Headern der letzten HTTP-Anfrage zurück. Jedes Element ist eine Zeichenkette im Format 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.';
}
Statuszeile: HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Content-Length: 1256 ...

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.';
}
Content-Type: text/html; charset=UTF-8

// 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.