So beheben Sie den Fehler "Headers already sent" in PHP: Schritt-für-Schritt-Anleitung

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Lernen Sie kennen: "Headers already sent" – Ihr neuer Feind (und Freund)

\n\n

Wenn Sie jemals in PHP programmiert haben, sind Sie diesem Fehler mit Sicherheit schon begegnet. Er taucht plötzlich auf, oft im ungünstigsten Moment – wenn Sie Ihr Skript fast fertig haben. Die Meldung ist erschreckend, rot, und es scheint, als wäre der gesamte Code kaputt. Aber in Wirklichkeit ist dies einer der nützlichsten Fehler in PHP. Er lehrt Sie, richtig mit dem HTTP-Protokoll zu arbeiten.

\n\n

In diesem Tutorial analysieren wir, warum der Fehler Headers already sent auftritt, wie Sie ihn diagnostizieren und vor allem, wie Sie ihn ein für alle Mal beheben. Wir kopieren nicht einfach eine Antwort von Stack Overflow – wir verstehen das Wesentliche. Los geht's!

\n\n

Was sind HTTP-Header und warum beschwert sich PHP darüber?

\n\n

Bevor wir heilen, müssen wir die Anatomie verstehen. Wenn PHP eine Antwort an den Browser sendet, geschieht dies in zwei Schritten:

\n\n
    \n
  • Zuerst – die Header. Dies sind die Metainformationen: Inhaltstyp (Content-Type), Kodierung, Cookies, Antwortstatus (200 OK, 404 Not Found).
  • \n
  • Dann – der Antwortkörper (Body). Dies ist das eigentliche HTML, der Text, JSON – das, was der Benutzer sieht.
  • \n
\n\n

Das Problem ist, dass PHP keine Header mehr senden kann, nachdem es begonnen hat, den Body zu senden. Wenn Sie versuchen, header() aufzurufen, nachdem Sie bereits ein Zeichen (auch nur ein Leerzeichen) ausgegeben haben, gibt PHP einen Fehler aus:

\n\n
Warning: Cannot modify header information - headers already sent by (output started at /path/to/file.php:12)
\n\n

Das ist die ganze Magie. Der Fehler ist nicht fatal – er warnt Sie lediglich, dass Ihr header() nicht funktioniert hat. Die Folgen können jedoch schwerwiegend sein: Die Weiterleitung wird nicht ausgeführt, das Cookie wird nicht gesetzt, die JSON-Antwort wird beschädigt.

\n\n

Die Top-5-Gründe, warum dies passiert

\n\n

Lassen Sie uns die häufigsten Szenarien durchgehen. Erkennen Sie sich wieder?

\n\n

1. Leerzeichen oder Leerzeile vor <?php

\n\n

Das ist ein Klassiker. Sie öffnen eine Datei, und vor dem öffnenden Tag <?php befindet sich ein Leerzeichen, eine Leerzeile oder ein BOM-Zeichen (Byte Order Mark). PHP interpretiert dieses Zeichen als Teil der Ausgabe – und schon geht es los.

\n\n
// ❌ Fehler: Leerzeichen vor <?php\n <?php\nheader('Location: /new-page.php');\n?>
\n\n
// ✅ Richtig: Keine Zeichen vor <?php\n<?php\nheader('Location: /new-page.php');\n?>
\n\n

2. Ausgabe mit echo oder print vor header()

\n\n

Ein logischer, aber häufiger Anfängerfehler: Zuerst etwas ausgeben und dann versuchen, den Benutzer umzuleiten.

\n\n
<?php\necho "Hallo Welt!";\nheader('Location: /thanks.php'); // ❌ Fehler: Ausgabe erfolgte bereits\n?>
\n\n

3. HTML-Code vor dem PHP-Block

\n\n

In der Datei kann gemischter Code vorkommen: zuerst HTML-Markup, dann PHP-Logik mit header().

\n\n
<!DOCTYPE html>\n<html>\n<head>\n    <title>Meine Website</title>\n</head>\n<body>\n<?php\nheader('Location: /login.php'); // ❌ Fehler: HTML wurde bereits gesendet\n?>\n</body>\n</html>
\n\n

4. PHP-Fehler und Funktionen wie var_dump()

\n\n

Das Skript kann Warnungen oder Debug-Informationen vor dem Aufruf von header() ausgeben. Zum Beispiel, wenn display_errors aktiviert ist und PHP eine Warnung ausgibt.

\n\n
<?php\nvar_dump($some_variable); // Datenausgabe\nheader('Content-Type: application/json'); // ❌ Fehler\n?>
\n\n

5. Unsichtbare Zeichen in eingebundenen Dateien (include/require)

\n\n

Sie binden eine Datei mit include oder require ein, und am Ende dieser Datei befindet sich ein zusätzliches Leerzeichen oder ein Leerzeichen nach dem schließenden ?>.

\n\n
// config.php\n<?php\n$db_host = 'localhost';\n?>\n // ← Dieses Leerzeichen nach ?> zerstört alles!
\n\n

So finden Sie die Fehlerquelle: Schritt-für-Schritt-Diagnose

\n\n

Das Wichtigste ist: Der Fehler gibt immer an, wo genau die Ausgabe begonnen hat. Lesen Sie die Meldung aufmerksam

Blogs

Buchempfehlungen