W3docs

PHP headers_list() Funktion: Alles, was Sie wissen müssen

Als PHP-Entwickler benötigen Sie manchmal eine Liste der HTTP-Header, die an den Client gesendet wurden. headers_list() ist dafür die richtige Funktion.

Jede PHP-Antwort enthält eine Reihe von HTTP-Headern — Dinge wie Content-Type, Set-Cookie und beliebige benutzerdefinierte Werte. Die Funktion headers_list() ermöglicht es Ihnen, diese Menge innerhalb Ihres Skripts zu untersuchen: Sie gibt die Header zurück, die PHP gleich an den Client senden wird (oder bereits gesendet hat). Das ist äußerst nützlich beim Debuggen von Weiterleitungen, Content-Types und Cookies, bevor die Antwort tatsächlich gesendet wird.

Diese Seite behandelt, was headers_list() zurückgibt, wann diese Header tatsächlich vorhanden sind, den Unterschied zwischen dieser Funktion und headers_sent() sowie praktische Verwendungsmuster.

Syntax

headers_list(): array

headers_list() nimmt keine Parameter entgegen und gibt ein indiziertes array von Zeichenketten zurück. Jede Zeichenkette ist eine einzelne Header-Zeile in der genauen Form, in der sie gesendet wird, zum Beispiel Content-Type: text/html; charset=UTF-8. Wenn noch keine Header gesetzt wurden, erhalten Sie ein leeres Array.

Ein einfaches Beispiel

Die Funktion spiegelt die Header wider, die PHP aktuell zu senden plant. Setzen Sie zunächst einige Header mit header() und listen Sie diese dann auf:

<?php

header('Content-Type: application/json');
header('X-Powered-By: w3docs');

$headers = headers_list();
foreach ($headers as $header) {
    echo $header, "\n";
}

Eine typische Ausgabe (die genaue Zusammensetzung hängt von Ihrer PHP-/Serverkonfiguration ab):

Content-Type: application/json
X-Powered-By: w3docs

PHP fügt häufig eigene Standard-Header hinzu (wie Content-Type und X-Powered-By), bevor Ihr Code ausgeführt wird. Die Liste kann daher Einträge enthalten, die Sie nie explizit gesetzt haben.

Wann sind die Header verfügbar?

headers_list() spiegelt nur die Header wider, die PHP in seinem internen Puffer hält. Dabei sind zwei Konsequenzen wichtig:

  • Die Funktion gibt Header zurück, unabhängig davon, ob sie bereits gesendet wurden oder nicht. Verwenden Sie sie zusammen mit headers_sent(), wenn Sie wissen müssen, ob der Puffer bereits geleert wurde.
  • Sie wird nur serverseitig ausgeführt. Sie gibt keine Request-Header zurück, die der Browser an Sie gesendet hat — dafür verwenden Sie getallheaders() oder die globale Variable $_SERVER.

Auf einen bestimmten Header prüfen

Eine häufige Aufgabe ist die Überprüfung, ob ein bestimmter Header gesetzt wurde — zum Beispiel um sicherzustellen, dass der Location-Header einer Weiterleitung vorhanden ist, bevor man sich darauf verlässt:

<?php

header('Location: /dashboard');

$hasLocation = false;
foreach (headers_list() as $header) {
    if (stripos($header, 'Location:') === 0) {
        $hasLocation = true;
        break;
    }
}

echo $hasLocation ? "Redirect header is set\n" : "No redirect header\n";

Ausgabe:

Redirect header is set

stripos(..., 'Location:') === 0 vergleicht am Anfang der Zeile ohne Berücksichtigung der Groß-/Kleinschreibung, da Header-Namen nicht case-sensitiv sind.

headers_list() im Vergleich zu verwandten Funktionen

FunktionWas sie tut
headers_list()Gibt die Response-Header zurück, die PHP senden wird (als Array).
headers_sent()Gibt an, ob die Header bereits an den Client gesendet wurden.
header()Fügt einen einzelnen Response-Header hinzu oder ersetzt ihn.
header_remove()Entfernt einen Header, der zuvor von Ihnen oder PHP gesetzt wurde.

Da headers_list() nur lesend arbeitet, kann sie jederzeit sicher aufgerufen werden — sie erzeugt niemals die Warnung „headers already sent", die bei header() auftreten kann.

Häufige Anwendungsfälle

  • Debugging: Geben Sie headers_list() während der Entwicklung aus, um genau zu sehen, was der Server sendet, einschließlich der durch setcookie() gesetzten Cookies.
  • Bedingte Logik: Entscheiden Sie, ob ein Header nur dann hinzugefügt werden soll, wenn er noch nicht vorhanden ist.
  • Tests: Stellen Sie sicher, dass ein Controller den erwarteten Content-Type oder Cache-Control erzeugt hat.

Fazit

headers_list() liefert Ihnen einen schreibgeschützten Snapshot der HTTP-Response-Header, die PHP zu senden beabsichtigt. Kombinieren Sie sie mit headers_sent() zur Zeitpunktprüfung, mit header() zum Setzen von Werten und mit header_remove() zum Entfernen von Headern. Zusammen geben Ihnen diese Funktionen die vollständige Kontrolle über den Response-Head, bevor er den Browser erreicht.

Übung

Übung
Wozu dienen einige häufig verwendete PHP-Header-Funktionen?
Wozu dienen einige häufig verwendete PHP-Header-Funktionen?
Was this page helpful?