Individuelle WP Datenbank Fehlerseite

Die Fehlerseite die WordPress anzeigt, wenn keine Verbindung mit der Datenbank besteht, ist ziemlich hässlich. Und nicht nur das: Je nach Einsatzgebiet der Software kann es auch unprofessionell aussehen, wenn der Besucher eine Seite mit für ihn verwirrenden Erklärungen und WordPress-Logo vorgesetzt bekommt.

Standard WordPress Database Error

Leider bietet WordPress derzeit keine offizielle Möglichkeit, die Seite mit einem Template individuell zu gestalten. Auch die Nutzung eines Plugins fällt weg, da für die Plugin-Abfrage die Datenbankverbindung benötigt wird. Mit einem kleinen Hack kommt man aber doch zur eigenen Fehlerseite, inklusive einer Benachrichtigung per eMail an den Administrator.

Schritt 1: Funktion einbauen (Hack)

Öffne die Datei wp-db.php im Ordner wp-includes und suche die Funktion bail (bei WordPress Version 2.1.3 beginnt diese ab Zeile 357). Diese Funktion wird bei einem Problem mit der Datenbankverbindung aufgerufen und sorgt dafür, dass die Standard WordPress-Fehlerseite angezeigt wird. Um WordPress nun beizubringen, eine spezielle Fehlerseite anzuzeigen, muss direkt nach der Zeile

function bail($message) { // Just wraps errors in a nice header and footer

der folgende Code eingesetzt werden:

/* custom error page
shows a custom error page and emails error message */

include('wp-content/themes/default/db-error.php');
mail('info@test.com', 'Wordpress Datenbank-Fehler',
html_entity_decode(strip_tags($message)));
die;

/* end custom error page */

Das Ergebnis sieht dann so aus:

Individuelle WordPress Datenbank Fehlerseite - Listing

Der Code im Einzelnen:

include('wp-content/themes/default/db-error.php');
Bindet die individuell gestaltete Fehlerseite ein. Natürlich muss der Dateipfad an das benutzte Theme angepasst werden.

mail('info@test.com', WordPress Datenbank-Fehler', html_entity_decode(strip_tags($error)));
Die Fehlermeldung (bzw. der WordPress-eigene Text) wird per eMail an den Administrator geschickt. Hier muss die eMailadresse entsprechend angepasst werden. Wer auf die eMail-Benachrichtigung verzichten will, kann diese Zeile auch ganz einfach löschen.

die;
die; beendet die weitere Ausführung von Code und verhindert damit die Ausgabe der Standard-Fehlermeldung.

Die Alternative

Für alle, die auf Nummer sicher gehen und die Originaldatei nicht verändern wollen, gibt es auch eine Alternativmöglichkeit. Dazu muss die Datei wp-db.php ins Verzeichnis wp-content kopiert und in db.php umbenannt werden. Danach wird der Hack in die db.php eingefügt. WordPress prüft nämlich ständig, ob im Verzeichnis wp-content eine Datei namens db.php existiert und zieht diese der „originalen“ wp-db.php vor. Da die db.php bei einem Update von WordPress nicht überschrieben wird, funktioniert die individuelle Datenbank-Fehlerseite weiterhin. Allerdings können so auch Probleme entstehen: Wird nämlich im Rahmen des WordPress Updates die Datei wp-db.php aktualisiert, nutzt man durch die vorhandene db.php weiterhin den „alten“ Code.

Schritt 2: Individuelle Fehlerseite erstellen

Erstelle eine neue Datei namens db-error.php und speichere die Datei im Theme-Ordner von WordPress (der Pfad und der Name der Datei muss mit dem Pfad aus Schritt 1 übereinstimmen). Nun steht der Gestaltung der eigenen Fehlerseite eigentlich nichts mehr im Wege. Wichtig ist allerdings, dass kein WordPress-Code benutzt wird, denn ohne Datenbankverbindung funktionieren nur die wenigsten Template-Tags.

Um die neue Fehlerseite im Look des aktuell benutzten WordPress-Themes zu gestalten, ist es wohl am einfachsten, den Quelltext einer Seite des eigenen Blogs (z.B. die Einzelansicht eines Posts) in die Datei db-error.php zu kopieren und ungewünschten Code zu entfernen bzw. die individuelle Fehlermeldung einzufügen.

Schritt 3: Der grosse Test

Zum Testen des Hacks muss die Verbindung zur Datenbank kurz unterbrochen werden. Dazu wird in der Datei wp-config.php im Root-Verzeichnis von WordPress der Name der Datenbank temporär geändert. Damit wird WordPress der Zugriff auf die Datenbank verunmöglicht, so dass das Blog nun die neue Fehlerseite anzeigt und ein eMail an den Administrator verschickt. Aber nur nicht vergessen, den Namen der Datenbank in wp-config.php wieder auf den Originalnamen zu ändern 😉

Die Dateien zum Download

Wer es einfacher haben will, kann eine angepasste wp-db.php (WordPress Version 2.1.3) sowie eine auf dem Kubrick-Standardtheme aufbauende Musterdatei von db-error.php hier als ZIP-Datei downloaden:

custom-db-error.zip

Und noch dies…

Der Hack zur eigenen Datenbank-Fehlerseite funktioniert mit WordPress Version 1.5.1.3 und höher. Bei einem Update auf eine neuere WordPress-Version muss der Hack allerdings erneut in die wp-db.php eingefügt werden, da die Datei bei ziemlich jedem Update durch eine neuere Version ersetzt wird.

Zu hoffen bleibt, dass WordPress in einer späteren Version standardmässig das Einbinden eines individuellen Datenbankfehler-Templates unterstützt. Erste Wünsche (mit einem ähnlichen Code und ohne eMailbenachrichtigung) wurden bereits ans WordPress-Team herangetragen. Schwierig zu realisieren wäre das ja nicht, wie dieser Hack zeigt. Die Credits dafür gehören jedoch Melvin Rivera, von dessen Post über den Hack ich mich zu grossen Teilen inspirieren liess.

[Update] 01.01.2008
Seit der Version 2.3.2 beherrscht WordPress die Einbindung einer eigenen Datenbank-Fehlerseite auch selbst, so dass obiger Hack nicht mehr notwendig ist. Weitere Informationen dazu in meinem Beitrag „Eigene Fehlerseite bei Datenbank-Problemen„.

14 Comments

  1. bluetime 11.05.2007
  2. BloggingTom 11.05.2007
  3. bluetime 11.05.2007
  4. bluetime 11.05.2007
  5. STiGMaTa_ch 12.05.2007
  6. BigBo 12.05.2007
  7. BloggingTom 13.05.2007
  8. 3.14a 13.06.2007
  9. bluetime 13.06.2007
  10. BloggingTom 13.06.2007
  11. bluetime 13.06.2007
  12. 3.14a 13.06.2007
  13. e_fetch 29.12.2007
  14. M aus W :-) 2.06.2009