W3docs

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

Die PHP header() Funktion ermöglicht das Setzen von HTTP-Headern, um Weiterleitungen, Downloads, Statuscodes und Caching zu steuern.

Jede HTTP-Antwort, die ein Webserver sendet, besteht aus zwei Teilen: einem Satz von Headern (Metadaten wie Inhaltstyp, Caching-Regeln und Statuscode), gefolgt vom Antwort-Body (dem HTML, JSON, Bild oder der Datei, die der Browser empfängt). PHPs header() Funktion ermöglicht es Ihnen, diese Header aus Ihrem Skript heraus zu schreiben — so können Sie Benutzer weiterleiten, Downloads bereitstellen, den Inhaltstyp festlegen, Caching steuern und benutzerdefinierte Statuscodes senden.

Dieser Leitfaden behandelt die Syntax und Parameter von header(), die eine Regel, über die fast jeder stolpert (der Fehler „headers already sent"), sowie die häufigsten praxisnahen Anwendungsfälle.

Was ist die header() Funktion?

header() ist eine in PHP integrierte Funktion, die einen rohen HTTP-Header an den Client sendet. Ein Header ist eine einzelne Zeile wie Content-Type: text/html oder Location: /login, die der Browser vor dem Seiteninhalt liest. Da die Header in der Antwort zuerst kommen, funktioniert header() nur, solange PHP noch diesen Header-Abschnitt aufbaut — siehe die Regel „headers already sent" weiter unten.

Syntax und Parameter

header(string $header, bool $replace = true, int $response_code = 0): void
ParameterTypBeschreibung
$headerstringDie zu sendende Header-Zeile, z. B. "Content-Type: application/json".
$replaceboolOb dieser Aufruf einen vorherigen Header mit demselben Namen ersetzt. Bei false werden mehrere Header mit demselben Namen gesendet. Standardmäßig true.
$response_codeintErzwingt den HTTP-Statuscode der Antwort. 0 (der Standardwert) bedeutet „Status unverändert lassen".

Die Funktion gibt nichts zurück (void). Sie teilt Ihnen nicht mit, ob der Header akzeptiert wurde — wenn bereits Ausgabe gesendet wurde, gibt sie stattdessen eine Warnung aus.

Einen Header setzen

Die einfachste Verwendung besteht darin, zu deklarieren, welche Art von Inhalt die Antwort enthält. Dies ist wichtig, wenn Ihr Skript JSON, XML, reinen Text oder eine Datei anstelle von HTML zurückgibt:

<?php

header("Content-Type: application/json");

echo json_encode(["status" => "ok", "id" => 42]);

Der Content-Type-Header teilt dem Browser mit, den Body als JSON zu behandeln, sodass er {"status":"ok","id":42} als Daten analysiert, anstatt es als Webseite darzustellen.

Die Regel „headers already sent"

Dies ist das Wichtigste, was Sie über header() wissen müssen: Es muss aufgerufen werden, bevor irgendeine Ausgabe Ihr Skript verlässt. Ausgabe umfasst HTML, echo/print, var_dump() und sogar ein unbeabsichtigtes Leerzeichen oder eine Leerzeile vor dem öffnenden <?php-Tag. Sobald ein Byte des Body gesendet wurde, ist der Header-Abschnitt geschlossen und PHP gibt aus:

Warning: Cannot modify header information - headers already sent

Es gibt zwei Möglichkeiten, dies zu vermeiden:

<?php

// 1. Check first — useful when a header is optional
if (!headers_sent()) {
    header("X-Powered-By: MyApp");
}

// 2. Buffer output so nothing is flushed until you choose to
ob_start();                 // capture everything that gets echoed
echo "page content...";
header("X-Cache: MISS");    // still works — body is held in the buffer
ob_end_flush();             // now send headers + buffered body together

Eine häufige Ursache ist ein Editor, der die Datei mit einem UTF-8-BOM oder einem Zeilenumbruch nach ?> speichert. Das vollständige Weglassen des schließenden ?>-Tags in reinen PHP-Dateien ist die empfohlene Methode, um dies zu vermeiden.

Häufige Anwendungsfälle

Weiterleitung zu einer anderen URL

Senden Sie einen Location-Header und beenden Sie dann das Skript, damit kein weiterer Code ausgeführt wird:

<?php

header("Location: https://example.com/login");
exit;   // always exit after a redirect

Standardmäßig ist dies eine 302 Found-Weiterleitung (temporär). Für einen dauerhaften Umzug übergeben Sie 301 als Statuscode, damit Suchmaschinen ihren Index aktualisieren:

<?php

// 301 Moved Permanently
header("Location: https://example.com/new-page", true, 301);
exit;

Einen benutzerdefinierten Statuscode senden

Sie können einen Status ohne Weiterleitung setzen — zum Beispiel für eine API, die „not found" zurückgibt:

<?php

header("HTTP/1.1 404 Not Found");
// or, more portably:
header("Status: 404 Not Found", true, 404);

echo "Resource not found";

Für Statuscodes speziell ist die dedizierte Funktion http_response_code() klarer und leichter zu lesen.

Einen Dateidownload erzwingen

Kombinieren Sie Content-Type mit Content-Disposition: attachment, damit der Browser die Datei speichert, anstatt sie anzuzeigen:

<?php

$file = "report.pdf";

header("Content-Type: application/pdf");
header("Content-Disposition: attachment; filename=\"$file\"");
header("Content-Length: " . filesize($file));

readfile($file);   // stream the file to the client
exit;

Siehe readfile() zum Streamen des Dateiinhalts an die Ausgabe.

Browser-Caching steuern

Mit Headern können Sie dem Browser mitteilen, ob (und wie lange) er eine Antwort wiederverwenden darf:

<?php

// Tell the browser never to cache this response
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Expires: 0");

Mehrere Header mit demselben Namen senden

Die meisten Header ersetzen alle vorherigen mit demselben Namen. Setzen Sie das zweite Argument auf false, wenn Sie tatsächlich mehr als einen benötigen (selten, aber für manche Header gültig):

<?php

header("X-Sample: first");
header("X-Sample: second", false);   // both X-Sample headers are sent

Verwandte Funktionen

header() schreibt jeweils einen Header, aber PHP hat übergeordnete Hilfsfunktionen für die häufigsten Fälle:

Um tiefer in die Definition und den Aufruf eigener Funktionen einzutauchen, siehe PHP Functions.

Fazit

Die header() Funktion ist Ihre direkte Verbindung zu den HTTP-Antwort-Headern in PHP. Die Regeln sind einfach: Erstellen Sie den Header-String, rufen Sie header() vor jeglicher Ausgabe auf und verwenden Sie exit nach einer Weiterleitung. Damit können Sie Benutzer weiterleiten, Inhaltstypen festlegen, Downloads bereitstellen, Statuscodes senden und Caching steuern — die Bausteine fast jeder dynamischen PHP-Antwort.

Übungen

Übung
Was macht die PHP header() Funktion?
Was macht die PHP header() Funktion?
Was this page helpful?