Die Fehlerseite, die WordPress bei Problemen mit der Datenbank ausgibt, gewinnt beim besten Willen keinen Schönheitswettbewerb. Doch seit WordPress 2.3 (2007) lässt sich diese einfache Fehlermeldung mit einer anderen, angepassten oder hübscheren eigenen Version überschreiben. Dafür muss lediglich eine db-error.php-Datei im Verzeichnis /wp-content/ abgelegt werden.

Browserfenster mit Text: Error establishing a database connection
Out of the box wird bei einem Datenbankproblem einfach ein wenig Text auf weißem Grund ausgegeben.

Grundlegende Anpassungen

Die Möglichkeiten, die sich uns durch diese Datei bieten sind vielfältig. Zunächst wäre es zum Beispiel sinnvoll, der Fehlermeldung einen neuen Text und ein Mindestmaß an Styling zukommen zu lassen. In der einfachsten Form kann das etwa wie folgt aussehen:

<?php // KrautPress DB Error page
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 600'); // 1 hour = 3600 seconds
?>

<html>
	<head>
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>Fehler bei der Datenbankverbindung</title>

		<style type="text/css">
			body {
				font-family: Arial, sans-serif;
			}
		</style>
	</head>

<body>
	<p>Es ist ein Fehler aufgetreten</p>
</body>

</html>
Code-Sprache: PHP (php)

Mit diesem Code lässt haben wir nun eigenen Text für die Fehlermeldung. Das Styling beschränkt sich in unserem Beispiel auf eine neue Schriftart.

Browserfenster mit deutscher Fehlermeldung
Die Fehlermeldung nach der Anpassung mit unserem Beispiel-Code.

Sowohl das Design als auch der Inhalt der Fehlerseite können aber natürlich nach Belieben erweitert und zum Beispiel an das genutzte Theme angelehnt werden.

Auf Fehler aufmerksam werden

Aber neben den augenscheinlichen Design-Anpassungen können wir uns mit der db-error.php einen deutlichen Vorteil verschaffen und bei Problemen automatisiert Benachrichtigungen versenden.

Die einfachste Möglichkeit hierfür ist das Absenden einer E-Mail beim Aufrufen der Fehlerseite . Auf den meisten Servern lässt sich das ganz einfach über die PHP-Funktion mail(); erledigen.

<?php // KrautPress DB Error page
header('HTTP/1.1 503 Service Temporarily Unavailable');
header('Status: 503 Service Temporarily Unavailable');
header('Retry-After: 600'); // 1 hour = 3600 seconds

// Sendet bei jedem Seitenaufruf eine Mail an eine definierte Adresse
mail('E-MAIL-ADRESSE', 'BETREFF', 'INHALT', 'ABSENDER NAME');
?>

<html>
	<head>
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<title>Fehler bei der Datenbankverbindung</title>

		<style type="text/css">
			body {
				font-family: Arial, sans-serif;
			}
		</style>
	</head>

<body>
	<p>Es ist ein Fehler aufgetreten</p>
</body>

</html>
Code-Sprache: PHP (php)

Durch Einfügen der Funktion in Zeile 7 unsere db-error.php können wir uns selbst (oder einer anderen Person bzw. einem Dienst) eine definierte Nachricht zukommen lassen.

Ich persönlich habe in den letzten Jahren alle meine Fehlerseiten dahingehend umgestellt, dass sie ihre Nachrichten an einen Dienst wie IFTTT senden, sodass mein Postfach frei bleibt und ich per Push-Nachricht informiert werde.

Über IFTTT könnten auch weitere Aktionen ausgeführt werden. Zum Beispiel könnte ein Hinweis an Slack durchgereicht werden oder die Kaffeemaschine im Büro dazu veranlassen Kaffee für die unfreiwillige Nachtschicht zu kochen. Schöne neue Welt.

Fehler protokollieren und mehr

Dass mit dem Absenden einfacher Mails das Ende der Möglichkeiten noch lange nicht erreicht ist, zeigt ein Projekt unter dem Titel better-wp-db-error. Die Kollegen aus Finnland haben ihre db-error.php dabei so angepasst, dass sie die auflaufenden Fehlermeldungen nicht nur in eine Log-Datei speichert, sondern auch über wp cli, die Kommandozeilen-Erweiterung für WordPress, ausgeben kann.

Browserfenster mit ausführlicher Fehlermeldung.
Better WP DB Error bringt ein eigenes Design mit, kann aber natürlich auch als Ausgangspunkt für eigene Anpassungen genutzt werden.

Da der Fehlertext in der Originalversion nur in finnischer Sprache vorliegt, habe ich auf Github einen Fork des Projekts angelegt, der Deutsch lokalisiert ist.

Benutz ihr die db-error.php schon? Und wie lasst ihr euch / würdet euch benachrichtigen lassen?