Start · Sprachen · PHP · Referenz · $http_response_header

$http_response_header

Superglobal

Enthält nach einem HTTP-Request über einen URL-Wrapper die vom Server gesendeten Response-Header als Array.

seit PHP 4.0.0 Kategorie: http

Signatur

array $http_response_header

Beschreibung

$http_response_header ist eine automatisch befüllte Variable, die nach der Verwendung eines HTTP-URL-Wrappers (z. B. mit file_get_contents(), fopen() oder file()) im aktuellen Gültigkeitsbereich verfügbar ist. Sie enthält alle HTTP-Response-Header, die der Server zurückgesendet hat, als indiziertes Array von Strings.

Das erste Element des Arrays ist typischerweise die HTTP-Statuszeile (z. B. HTTP/1.1 200 OK), gefolgt von allen weiteren Header-Zeilen wie Content-Type, Set-Cookie, Location usw. Die Variable ist besonders nützlich, wenn man auf Header-Informationen zugreifen möchte, ohne die komplexere cURL-Extension einzusetzen.

Wichtig zu beachten ist, dass $http_response_header lokal im aktuellen Scope erstellt wird – also innerhalb der Funktion, in der der HTTP-Request ausgeführt wurde. Sie ist keine echte Superglobale und steht daher nicht automatisch in anderen Gültigkeitsbereichen zur Verfügung. Sie muss ggf. explizit zurückgegeben oder referenziert werden.

Die Variable wird nur befüllt, wenn ein HTTP- oder HTTPS-URL-Wrapper verwendet wird. Bei lokalen Dateipfaden oder anderen Protokollen bleibt sie undefiniert.

Beispiele

HTTP-Status-Code nach file_get_contents() auslesen

<?php
$url = 'https://www.example.com/';
$body = file_get_contents($url);

if ($body !== false) {
    // Der erste Header enthält die Statuszeile
    $statusLine = $http_response_header[0];
    echo $statusLine . PHP_EOL;

    // Alle Header ausgeben
    foreach ($http_response_header as $header) {
        echo $header . PHP_EOL;
    }
} else {
    echo 'Fehler beim Abrufen der URL.' . PHP_EOL;
}
HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Date: Mon, 01 Jan 2024 12:00:00 GMT ...

Header in einer Funktion erfassen und zurückgeben

<?php
function fetchWithHeaders(string $url): array
{
    $body = file_get_contents($url);

    // $http_response_header existiert nur in diesem lokalen Scope!
    return [
        'body'    => $body,
        'headers' => $http_response_header ?? [],
    ];
}

$result = fetchWithHeaders('https://www.example.com/');

// HTTP-Status ermitteln
$statusLine = $result['headers'][0] ?? 'Kein Header';
echo 'Status: ' . $statusLine . PHP_EOL;

// Content-Type-Header suchen
foreach ($result['headers'] as $header) {
    if (stripos($header, 'Content-Type:') === 0) {
        echo 'Content-Type: ' . trim(substr($header, strlen('Content-Type:'))) . PHP_EOL;
        break;
    }
}
Status: HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8

Weiterleitung (Redirect) erkennen

<?php
// allow_url_fopen muss in php.ini aktiviert sein
$context = stream_context_create([
    'http' => [
        'follow_location' => 0, // Redirects NICHT automatisch folgen
    ],
]);

$body = file_get_contents('http://example.com/redirect', false, $context);

foreach ($http_response_header as $header) {
    if (stripos($header, 'Location:') === 0) {
        $redirectUrl = trim(substr($header, strlen('Location:')));
        echo 'Weiterleitung zu: ' . $redirectUrl . PHP_EOL;
    }
}
Weiterleitung zu: https://example.com/ziel

// Wichtig · Fallstricke

Kein echter Superglobal: Obwohl PHP die Variable automatisch anlegt, ist sie kein echter Superglobal wie $_GET oder $_POST. Sie wird nur im lokalen Scope der aufgerufenen Funktion (bzw. im globalen Scope, wenn der Request dort stattfindet) angelegt. Um sie außerhalb einer Funktion zu nutzen, muss sie explizit zurückgegeben werden.

Überschreiben: Bei mehreren aufeinanderfolgenden HTTP-Requests wird $http_response_header jedes Mal überschrieben. Soll der Wert erhalten bleiben, muss er vorher in einer anderen Variable gespeichert werden.

Voraussetzung allow_url_fopen: Die Nutzung von HTTP-URL-Wrappern erfordert, dass in der php.ini die Direktive allow_url_fopen = On gesetzt ist. In restriktiven Server-Umgebungen ist dies möglicherweise deaktiviert – in diesem Fall empfiehlt sich die Verwendung von cURL.

Sicherheit: Beim Verarbeiten von Header-Werten aus nicht vertrauenswürdigen Quellen sollten die Inhalte stets validiert und gesäubert werden, um z. B. Header-Injection-Angriffe zu vermeiden.