Drupal, die White Screen of Death und das Byte Order Mark

Was ein Titel – hollywoodtauglich! :) Aber durchaus mit einem Hintergrund: Drupal kann in einen Zustand geraten, wo es außer einer weißen Seite (der White Screen of Death) nichts mehr ausgibt. Mit ein bisschen Pech betrifft das dann auch gleich den Admin-Bereich. Dies ist kein Phänomen, das Drupal alleine betrifft, auch CakePHP hat einen kleinen Hang zu einem solchen Verhalten!

Die Gründe wie Drupal in diesen Zustand geraten kann sind unterschiedlich, aber in fast allen Fällen auf UTF-8 zurückzuführen und sie stehen meistens in Zusammenhang mit Änderungen an einem Theme. Wenn man so klug war, ein Frontend-Theme und ein Admin-Theme zu verwenden kann man in einen Zustand geraten, in dem das Frontend eine weiße Seite anzeigt, und das Backend einwandfrei funktioniert. Dies hat den Vorteil, dass man sich die neuesten Meldungen des Drupal Watchdogs anschauen kann, und der verkündet in der Regel, dass er keinen Header senden kann, weil bereits Zeichen ausgegeben worden sind.

Was heißt das? Der Watchdog verweist auf den PHP-Befehl header() der mittels PHP einen http-Header versendet. Dies ist notwendig, wenn Drupal zum Beispiel einen Redirect auf eine andere Seite durchführen will, und Drupal macht eine Menge redirects! :) Das Problem an diesem Befehl (oder an Apache) ist, dass kein Header mehr versendet werden kann, wenn auch nur ein einzelnes Byte an Content über die Leitung gegangen ist. In dem Fall ist der Header bereits übertragen und nachträglich kann er nicht mehr geändert werden!

Heißt in unserem Fall: Die White Screen of Death kommt, weil kein Redirect durchgeführt werden kann, da irgendwo irgendetwas Bytes ausgibt, bevor Drupal den header-Befehl ausführt. Und da wir tunlichst keine Core-Dateien editieren, kann das in der Regel nur am Theme liegen! Hier gilt die Regel: Keine PHP-Datei (template.php) erhält ein schließendes ?> und generell darf vor einem <?php NICHTS stehen. Kein Space, keine neue Zeile, nichts!

Unter Umständen kann man nun Dateien im Editor öffnen bis zum Sankt Nimmerleinstag, man wird alles korrekt vorfinden! Vor allem dann, wenn die Dateien UTF-8 sind. Dies heißt eigentlich zwei Sachen: a) eine andere Datei ist schuld oder b) das Byte Order Mark (BOM) kommt ins Spiel.

Inzwischen wird man an einem Punkt angekommen sein, wo man bestenfalls nervös ist und eine Holzhammer-Lösung ins Spiel kommt: das Output-Buffering von PHP! Dies lässt sich in der php.ini (oder in manchen Fällen auch in der htaccess) einschalten und macht, was der Name sagt: Es schickt Content erst, wenn er komplett ist! Durch das verzögerte Senden des Contents hat es den Vorteil das man irgendwann und irgendwo einen Header-Befehl senden kann. Hat man das Output-Buffering eingeschaltet, geht die Seite in 99% der Fälle wieder! Darüber hinaus bekommt man so die Bestätigung, das tatsächlich irgendwo überzählige Zeichen ausgegeben werden.

Das Byte Order Mark (Hex: EF BB BF) kann am Anfang einer UTF-8-Datei stehen, und gibt die Byte-Reihenfolge und Kodierungsform der Datei an! Das Lustige ist, man kann das Byte Order Mark in eine Datei setzen, muss aber nicht!

Speichert man nun eine PHP-Datei mit einem BOM und benutzt den Header-Befehl, hat man ein Problem. Im Editor sieht man das BOM nicht, aber für Apache/PHP ist es durchaus vorhanden! Will heißen: vor dem <?PHP steht etwas – nämlich genau 3 Bytes – das Byte Order Mark! Dies gibt der Apache lustig aus, damit ist Content vorhanden und der Header abgeschlossen!

Heißt für uns: UTF-8 immer OHNE BOM speichern. Jetzt haben wir aber Windows, und das meint UTF-8 wäre ein Dorf in der Nähe von Kalkutta. Hier hilft uns der allseits beliebte und freie Editor Notepad++, der hat im Menü den Punkt „Kodierung“ und dort kann man UTF-8 mit BOM und UTF-8 ohne BOM auswählen!

Wenn man also nun in Drupal die Datei (oder auch Dateien) findet, die ein BOM besitzt, kann man das Output Buffering in der php.ini wieder abschalten und die White Screen of Death ist in der Regel weg!

Ähnliche Beiträge

Gigya Socialize – soziale Netzwerke für Drupal Acquia hat ein neues Modul für Drupal herausgebracht, und man mag über die „Kommerzialisierung von Drupal“ denken was man will, aber die Module von Ac...
Dummy HTML Snippets für Entwickler Mal was schnelles für zwischendurch: In letzter Zeit ist irgendwie ein regelrechter Hype um das gute alte Lorem Ipsum entstanden. Es gibt den Standard...
deck.js – Präsentationen in HTML Es muss nicht immer Powerpoint sein! Wenn ich eins gelernt habe in meinem ehemaligem Consulter-Leben, dann ist es das, ausreichend früh anzukommen um ...
Responsive Emails mit MJML für alle Clients Responsive Emails für zum Beispiel Newsletter sind eine schlimme Sache. Man könnte sogar sagen: HTML in E-Mails ist generell eine noch schlimmere Sach...

2 Antworten auf „Drupal, die White Screen of Death und das Byte Order Mark“

  1. Hey, der Artikel hat mir gerade das Leben gerettet – wollte die Drupal Installation schon komplett neu aufsetzen, jetzt läuft´s wieder!
    Danke.
    Dafür gibt´s ein Flattr.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.