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

Drupal und die nicht optimierte Datenbank Drupal kann viel, darüber sind wir uns einig, was Drupal allerdings nicht gut kann, ist eine Datenbank so zu generieren, dass aufgrund geeigneter Indi...
HTML-Tables mit jQuery Ich hoffe ihr benutzt Tabellen nur noch zur Datenvisualisierung, und nicht mehr für das Design! ;) Aber zumindest dort sind sie unumgänglich. Dummerwe...
Drupal Backend mit iPhone & iPad Der Administrationsbereich von Drupal ist zugegebenermaßen maximal anstrengend, besitzt aber den Vorteil auch maximal anpassbar zu sein. Im Gegensatz ...
Mozilla Thimble – HTML & CSS lernen Meine persönliche Meinung ist ja, das Mozilla anstatt sich auf den Browser zu konzentrieren, in den diversesten Nebenprojekten aufreibt. Teilweise kom...

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.