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.
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.
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.
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?
Das gibt es schon seit 2007? Man lernt doch nie aus 🙂
Ich hatte ja vor einigen Jahren mal die maintenance.php Datei geschrieben, aber dabei ist mir diese Datei nicht unter gekommen.
Das Monitoring mache ich aktuell über einen Dienst meines Providers, der Dienste überwacht. Aber die Idee mit der Mail Funktion ist sehr clever.
Das mit der Mail beim Seitenaufruf ist nur so lange clever, so lange du nicht dauerhaft wirklich viele Anfragen reinbekommst – dann kann man sich damit das Postfach nämlich ordentlich verkleistern, wenn man keine Begrenzung einbaut 🙂
Am besten gefällt mir persönlich die Möglichkleit der Kaffeemaschine entsprechende Anweisungen zu geben 😉