“headers already sent” durch WordPress-Plugin

Die Meldung “headers already sent” wir jeder PHP-Programmierer kennen. Aus verschiedenen Gründen gibt es eine headers()-Anweisung erst nach einer Ausgabe. Das kann z.B. vorkommen wenn ein Cookie gesetzt werden soll oder sonst irgendwelche Header verändert werden sollen. Normalerweise kann man recht schnell erkennen, an welcher Stelle der Text schon ausgegeben wurde (steht ja auch direkt in der Fehlermeldung):

Warning: Cannot modify header information – headers already sent by (output started at lastfm.php:1) in pluggable.php on line 391

Komisch war aber schon, dass auch im an den Browser gelieferten HTML-Quelltext nichts stand. Normalerweise findet sich dort zumindest mal ein <body>. Und in der lastfm.php fand sich ebenfalls nichts (der “übliche” Fehler mit dem Leerzeichen vor <?php fiel also weg).

Letztendlich war es eine einfache Ursache, aber mit bloßem Auge nicht sichtbar: Es wurden tatsächlich keine sichtbaren Zeichen gesendet. Allerdings hatte ich die Datei als UTF-8 gespeichert – und da gibt es standardmäßig ein Byte Order Mark (BOM). Das sind drei Byte am Anfang der Datei, die signalisieren, dass es sich um das UTF-8-Format handelt. Diese wurden beim Einbinden des Plugins immer gesendet, und wenn danach noch ein Header-Befehl kommt, dann erscheint eben diese Fehlermeldung. Umgehen kann man das, indem man einfach seinen Texteditor anweist, die Datei ohne BOM zu speichern.