Kurz gesagt: Die Meldung bedeutet, dass PHP schon etwas an den Browser geschickt hat, bevor WordPress Header wie Weiterleitungen oder Cookies setzen wollte. Fast immer ist es ein Leerzeichen, eine Leerzeile oder ein unsichtbares BOM-Zeichen vor <?php oder nach ?> in einer Datei, die du bearbeitet hast, oft der wp-config.php oder der functions.php. Die Meldung nennt Datei und Zeile: Dort entfernst du die überschüssigen Zeichen und speicherst als UTF-8 ohne BOM.
Die Fehlermeldung richtig lesen
Warning: Cannot modify header information - headers already sent by (output started at /var/www/html/wp-config.php:1) in /var/www/html/wp-includes/pluggable.php on line 1450
Die Meldung enthält zwei Dateien. Die hintere (pluggable.php) ist nur die Stelle, an der WordPress die Header setzen wollte, dort ist nichts kaputt. Entscheidend ist der Teil in Klammern: „output started at … wp-config.php:1“. In dieser Datei und Zeile beginnt die ungewollte Ausgabe. Liegt die Datei in wp-content/plugins/ oder wp-content/themes/, ist ein Plugin bzw. Theme verantwortlich.
Typische Folgen: Die Anmeldung klappt nicht, das Backend bleibt nach dem Speichern weiß, Weiterleitungen funktionieren nicht oder der RSS-Feed ist ungültig.
Anleitung: Fehler beheben
- Notiere Datei und Zeile aus dem Teil „output started at“.
- Lade die Datei per SFTP herunter und öffne sie in einem Code-Editor wie Visual Studio Code oder Notepad++. Nicht in Word oder dem Windows-Editor alter Versionen.
- Prüfe den Dateianfang:
<?phpmuss ganz oben in Zeile 1 stehen, ohne Leerzeichen oder Leerzeile davor. - Prüfe das Dateiende: Steht dort ein schließendes
?>, lösche es samt allem, was danach kommt. Bei reinen PHP-Dateien ist das schließende Tag überflüssig und eine häufige Fehlerquelle. - Speichere die Datei in der Kodierung „UTF-8“ ohne BOM. In Notepad++ unter Kodierung, in VS Code unten rechts in der Statusleiste.
- Lade die Datei wieder hoch und teste die Seite.
Mach vorher eine Kopie der Originaldatei. Hast du die Datei zuletzt selbst geändert, ist das die wahrscheinlichste Ursache. Bei Plugin- oder Theme-Dateien bearbeitest du nichts, sondern deaktivierst das Plugin bzw. wechselst das Theme und meldest den Fehler dem Entwickler.
Was ist ein BOM?
Das Byte Order Mark ist eine unsichtbare Zeichenfolge, die manche Editoren an den Anfang einer UTF-8-Datei setzen. Für PHP ist es normale Textausgabe. Du siehst es im Editor nicht, aber es landet vor jedem Header. Deshalb hilft es nicht, nur nach sichtbaren Leerzeichen zu suchen, die Kodierung muss stimmen.
Andere Ursachen
- Vorangehende PHP-Warnung: Erscheint vor der Meldung eine andere Warnung („Deprecated“, „Notice“), ist diese Warnung selbst die Ausgabe. Behebe sie oder schalte die Anzeige von Fehlern auf dem Live-System ab, siehe unten.
- Code mit
echoin der functions.php: Eigener Code, der direkt etwas ausgibt, statt sich an einen Hook zu hängen. - Nach einem Update: Ein Plugin ist mit deiner PHP-Version nicht kompatibel und gibt Warnungen aus. Siehe PHP-Version herausfinden.
Für Fortgeschrittene: Ursache per Kommandozeile finden
# Dateien mit BOM im WordPress-Verzeichnis finden
grep -rlI $'^\xEF\xBB\xBF' --include="*.php" .
# BOM aus einer Datei entfernen (vorher sichern!)
sed -i '1s/^\xEF\xBB\xBF//' wp-config.php
# Prüfen, ob Zeichen vor dem PHP-Tag stehen (erste Bytes als Hex)
head -c 8 wp-config.php | xxd
# PHP-Dateien finden, bei denen nach dem schließenden ?> noch Leerzeichen oder Leerzeilen folgen
grep -rlPz '\?>\s+\z' --include="*.php" .
Auf einem Produktivsystem sollten PHP-Warnungen nicht im Browser erscheinen. Schreibe sie stattdessen in eine Log-Datei:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false );
Die Meldungen landen dann in wp-content/debug.log. Schalte WP_DEBUG nach der Fehlersuche wieder ab und lösche das Log, es kann Pfade und andere interne Informationen enthalten.
Allgemeine Tipps zur Fehlersuche gibt dir Wie gehe ich vor, wenn Fehler auftreten?, weitere Fehlermeldungen findest du im Bereich Fehler & Probleme.
Passend dazu: Weiterleitungen und Header müssen vor der ersten Ausgabe gesendet werden, also in einem frühen Hook wie template_redirect. Welcher Hook wann läuft, zeigt WordPress-Hooks: Übersicht aller Actions und Filter.
Frage dazu? Poste die vollständige Meldung im Forum „Fehler & Probleme“: Zum WPDE-Forum
Häufige Fragen
Muss ich die pluggable.php reparieren?
Nein. Die Datei gehört zum WordPress-Kern und ist nur der Ort, an dem das Problem auffällt. Die Ursache steht in der Datei hinter „output started at“.
Hilft es, output_buffering in der php.ini einzuschalten?
Das kann die Meldung verschwinden lassen, versteckt aber nur das Symptom. Besser ist es, die ungewollte Ausgabe zu entfernen.