Beschreibung
int
header ( string string [, bool replace [, int http_reponse_code]])
header() wird zum Senden von
HTTP Anfangsinformationen (Headern) benutzt.
Weitere Informationen über HTTP Header finden
Sie unter HTTP/1.1 specification.
Der optionale Parameter replace gibt an, ob der
Header einen vorhergehenden Header ersetzten soll, oder ob ein zweiter
Header des selben Typs hinzugefügt werden soll. Standardmäßig wird
ersetzt. Sie können jedoch als das zweite Argument FALSE übergeben,
und so mehrere Header desselben Typs erzwingen. Zum Beispiel:
Der zweite optionale Parameter http_response_code
spezifiziert den HTTP Response Code. (Dieser Parameter ist in PHP 4.3.0
und höher verfügbar.)
Es gibt zwei Spezialfälle von Header-Aufrufen. Der erste ist ein
Header, der mit "HTTP/" beginnt (ob groß- oder
Kleinschreibung ist nicht relevant) und zum Herausfinden des zu
sendenden HTTP Statuscodes verwendet wird. Wenn Sie zum Beispiel
Apache konfiguriert haben, um ein PHP Skript zum Bearbeiten von
Anforderungen fehlender Dateien (mittels der
ErrorDocument Direktive) zu verwenden, möchten
Sie bestimmt sicherstellen, dass Ihr Skript den passenden Statuscode
generiert.
Anmerkung:
Die HTTP Status Header Zeile wird immer die erste zum Client
gesendete sein, egal ob der aktuelle header()
- Aufruf der erste ist oder nicht. Der Status kann mittels
header() jederzeit mit einer neuen Statuszeile
überschrieben werden, es sei denn, dass die HTTP Header bereits
gesendet wurden.
Anmerkung:
In PHP 3 funktioniert dies nur, wenn PHP als Apache Modul kompiliert
wurde. Sie können den gleichen Effekt erzielen, wenn Sie den
Status Header verwenden.
Der zweite Spezialfall ist der "Location:" Header. Es wird nicht nur
der Header an den Browser geschickt, sondern auch ein
REDIRECT (302) Statuscode, wenn nicht bereits ein
3xx Statuscode gesendet wurde.
Anmerkung:
HTTP/1.1 verlangt einen absoluten URI inkl. dem
Schema, Hostnamen und absoluten Pfad als Argument
von Location:,
aber manche Clients akzeptieren auch relative URIs. Gewöhnlich können
Sie mittels $_SERVER['HTTP_HOST'],
$_SERVER['PHP_SELF'] und dirname()
aus einem relativen Link einen absoluten URI selbst erstellen:
PHP-Skripte erzeugen oft dynamische Inhalte, die weder vom Browser
noch von irgendeinem Proxy zwischen Web-Server und Client-Browser
gepuffert ("gecached") werden sollen bzw. dürfen. Bei vielen Proxies
und Browsern kann das Cachen wie folgt unterbunden werden:
Anmerkung:
Es könnte auch sein, dass Ihre Seiten nicht zwischengespeichert
werden, auch wenn Sie obigen Header nicht ausgeben. Es gibt eine
Anzahl Optionen, welche die Benutzer in deren Browser einstellen
können, um das standardmäßige Verhalten bezüglich des Caching zu
verändern. Durch das Senden obiger Header sollten Sie irgendwelche
Einstellungen, welche die Ausgabe Ihres Skriptes zwischenspeichern
würden, außer Kraft setzen.
Weiters können Sie session_cache_limiter() und
die Konfigurationsoption session.cache_limiter
verwenden, um die korrekten Header bezüglich Caching automatisch
generieren zu lassen, sollten Sie Sessions benutzen.
Beachten Sie, dass header() aufgerufen werden muss,
bevor eine Ausgabe gesendet wurde, egal ob normale HTML Tags, leere
Zeilen in einer Datei oder von PHP. Ein weit verbreiteter Fehler ist
mittels include(), require(),
oder anderen Dateizugriffsmethoden Code zu lesen, und so unbewusst
Leerzeichen oder Leerzeilen auszugeben, bevor header()
aufgerufen wird. Das gleiche Problem besteht auch bei Verwendung einer
einzigen PHP/HTML Datei.
Anmerkung:
In PHP 4 können Sie dieses Problem umgehen, indem Sie Output
Buffering benutzen (mit dem Overhead, dass alle Ihre Ausgaben an
den Browser gepuffert werden, bis Sie diese Senden). Um dies zu tun,
verwenden Sie in Ihrem Skript ob_start() und
ob_end_flush(), oder setzten die
Konfigurationsdirektive output_buffering in der
php.ini bzw. in den Server Konfigurationsdateien.
Wollen Sie den Benutzer auffordern, die von Ihnen gesendeten Daten
wie z.B. eine generierte PDF Datei zu speichern, können Sie den
Header Content-Disposition verwenden,
um einen empfohlenen Dateinamen anzubieten und den Browser zu zwingen,
den Dialog zum Speichern anzuzeigen.
Anmerkung:
Der Microsoft Internet Explorer 4.01 hat einen Bug, der diese
Funktionalität verhindert, und es gibt keinen Workaround. Auch
in Microsoft Internet Explorer 5.5 existiert ein Bug, der dies
behindert, dieser kann jedoch mittels einem Upgrade auf Service
Pack 2 oder neuer behoben werden.
Anmerkung:
Ist safe mode aktiviert, wird
die UID des Skriptes dem realm Teil des Headers
WWW-Authenticate (für HTTP Authentifizierung
verwendet) hinzugefügt, sollten Sie diesen Header setzen.
Siehe auch headers_sent(),
setcookie() und den Teil
HTTP Authentifizierung.