header

(PHP 4, PHP 5, PHP 7, PHP 8)

headerSendet einen HTTP-Header in Rohform

Beschreibung

header(string $header, bool $replace = true, int $response_code = 0): void

header() wird zum Senden von HTTP-Anfangsinformationen (Headern) im Rohformat verwendet. Weitere Informationen über die HTTP-Header finden Sie in der » HTTP/1.1-Spezifikation.

Beachten Sie, dass Sie die Funktion header() aufrufen müssen, bevor Sie irgendeine andere Art von Ausgabe (seien es normale HTML-Tags, Leerzeilen in einer Datei oder von PHP) zum Client schicken. Es handelt sich hier um einen typischen Fehler, der zum Beispiel auftritt, wenn Sie Code mit Leerzeichen oder Leerzeilen, die ausgegeben werden, mittels include oder require oder einer anderen Datei-Zugriffsfunktion einlesen, bevor header() aufgerufen wird. Das gleiche Problem kann auch auftreten, wenn Sie eine Datei verwenden, in der HTML und PHP vermischt wurden.

<html>
<?php
/* Dies wird einen Fehler provozieren. Beachten Sie die vorangehende
 * Ausgabe, die vor dem Aufruf von header() erzeugt wird */
header('Location: http://www.example.com/');
exit;
?>

Parameter-Liste

header

Der Header-String.

Es gibt zwei Spezialfälle von Header-Aufrufen. Der erste ist ein Header, der mit "HTTP/" beginnt (ob Groß- oder Kleinschreibung ist nicht relevant). Dieser Header wird verwendet, um den zu sendenden HTTP-Statuscode anzugeben. Wenn Sie zum Beispiel Apache konfiguriert haben, 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.

<?php
// Dieses Beispiel veranschaulicht den Spezialfall "HTTP/".
// Bessere Alternativen für typische Anwendungsfälle sind
// 1. header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
//    (um http-Statusmeldungen für Clients, die noch HTTP/1.0 verwenden,
//    zu überschreiben)
// 2. http_response_code(404); (um die Standardmeldung zu verwenden)
header("HTTP/1.1 404 Not Found");
?>

Der zweite Spezialfall ist der "Location:"-Header. Es wird nicht nur der Header an den Browser geschickt, sondern auch ein REDIRECT-Statuscode (302), wenn nicht bereits der 201- oder ein 3xx-Statuscode gesendet wurde.

<?php
header
("Location: http://www.example.com/"); /* Browser umleiten */

/* Stellen Sie sicher, dass der nachfolgende Code nicht ausgeführt wird,
   wenn eine Umleitung stattfindet. */
exit;
?>

replace

Der optionale Parameter replace gibt an, ob der Header einen vorhergehenden gleichartigen Header ersetzen soll, oder ob ein zweiter Header des selben Typs hinzugefügt werden soll. Standardmäßig wird ersetzt; wenn Sie als zweites Argument false übergeben, können Sie so mehrere Header desselben Typs erzwingen. Zum Beispiel:

<?php
header
('WWW-Authenticate: Negotiate');
header('WWW-Authenticate: NTLM'false);
?>

response_code

Forciert einen HTTP-Response-Code des angegebenen Wertes. Dieser Parameter hat nur einen Effekt, wenn header nicht leer ist.

Rückgabewerte

Es wird kein Wert zurückgegeben.

Fehler/Exceptions

Wenn der Header nicht gesendet werden kann, gibt header() einen Fehler der Stufe E_WARNING aus.

Beispiele

Beispiel #1 Download-Dialog

Wollen Sie den Benutzer auffordern, die von Ihnen gesendeten Daten, 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.

<?php
// Wir werden eine PDF-Datei ausgeben
header('Content-Type: application/pdf');

// Sie wird downloaded.pdf genannt
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// Die ursprüngliche PDF-Datei heißt original.pdf
readfile('original.pdf');
?>

Beispiel #2 Caching-Direktiven

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:

<?php
header
("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit
?>

Hinweis:

Es könnte auch sein, dass Ihre Seiten nicht zwischengespeichert werden, auch wenn Sie die obigen Header nicht ausgeben. Es gibt eine Reihe von Optionen, welche die Benutzer in ihrem Browser einstellen können, um das standardmäßige Caching-Verhalten zu verändern. Durch das Senden obiger Header sollten Sie jedwede Einstellungen, die die Ausgabe Ihres Skriptes zwischenspeichern würden, außer Kraft setzen.

Weiterhin können Sie session_cache_limiter() und die Konfigurationsoption session.cache_limiter verwenden, um die korrekten Header bezüglich Caching automatisch generieren zu lassen, wenn Sessions verwendet werden sollen.

Anmerkungen

Hinweis:

Header sind nur dann zugänglich und werden nur dann gesendet, wenn die genutzte SAPI sie unterstützt.

Hinweis:

Sie können die Limitierung, dass Header vor jeglicher Ausgabe gesendet werden müssen, umgehen, indem Sie die Ausgabepufferung verwenden, mit dem Overhead, dass alle Ausgaben an den Browser auf dem Server gepuffert werden, bis Sie diese senden. Sie können dies tun, indem Sie in Ihrem Skript ob_start() und ob_end_flush() verwenden, oder indem Sie die Konfigurationsdirektive output_buffering in der php.ini bzw. in den Server-Konfigurationsdateien auf "On" setzen.

Hinweis:

Die HTTP-Status-Headerzeile 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, sofern die HTTP-Header noch nicht gesendet wurden.

Hinweis:

Die meisten zeitgemäßen Clients akzeptieren relative URIs als Argument für » Location:, aber einige ältere Clients benötigen einen absoluten URI inklusive dem Schema, Hostnamen und absoluten Pfad. Gewöhnlich können Sie mittels $_SERVER['HTTP_HOST'], $_SERVER['PHP_SELF'] und dirname() aus einem relativen Link einen absoluten URI selbst erstellen:

<?php
/* Weiterleitung auf eine andere Seite im aktuell angeforderten Verzeichnis */
$host  $_SERVER['HTTP_HOST'];
$uri   rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;
?>

Hinweis:

Die Session-ID wird nicht mit dem Location-Header übermittelt, selbst wenn session.use_trans_sid eingeschaltet ist. Sie muss daher manuell durch Verwendung der Konstante SID hinzugefügt werden.

Siehe auch

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

PHP cURL-Tutorial: Verwendung von cURL zum Durchführen von HTTP-Anfragen

cURL ist eine leistungsstarke PHP-Erweiterung, die es Ihnen ermöglicht, mit verschiedenen Servern über verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr zu kommunizieren. ...

TheMax

Autor : TheMax
Kategorie: PHP-Tutorials

Midjourney Tutorial - Anleitung für Anfänger

Über Midjourney, dem Tool zur Erstellung digitaler Bilder mithilfe von künstlicher Intelligenz, gibt es ein informatives Video mit dem Titel "Midjourney Tutorial auf Deutsch - Anleitung für Anfänger" ...

Mike94

Autor : Mike94
Kategorie: KI Tutorials

Grundlagen von Views in MySQL

Views in einer MySQL-Datenbank bieten die Möglichkeit, eine virtuelle Tabelle basierend auf dem Ergebnis einer SQL-Abfrage zu erstellen. ...

admin

Autor : admin
Kategorie: mySQL-Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

Ein data POST via Curl funktioniert nicht.

Anmorg93 Respekt, du bist ja nur um rund 10 Jahre zu spät dran.

Geschrieben von scatello am 21.11.2024 10:57:00
Forum: PHP Developer Forum
Ein data POST via Curl funktioniert nicht.

Hey, hatte auch mal das Problem. Oft liegt’s an fehlenden oder falschen Headern. Probier mal:​ $ch = curl_init(); curl_setopt($ch, CURLOPT_UR ...

Geschrieben von Anmorg93 am 21.11.2024 10:48:17
Forum: PHP Developer Forum
Probleme mit einem Linux-Befehl...

guten Tag liebe Community ;) hallo liebe Freunde auf der php-Ressource, hoffe, das landet im richtigen Unterforum also, womit ich im Moment zu ...

Geschrieben von dhubs am 15.11.2024 16:21:52
Forum: Off-Topic Diskussionen
ein .htaccess-File für eine WordPress-Installation - wie gehe ich hier vor.?

hallo und guten Tag, wie lege ich denn einen .htaccess für eine WordPress-Installation an - wie gehe ich hier vor. Kann man das denn so mache ...

Geschrieben von dhubs am 13.11.2024 15:52:54
Forum: Webmaster