Créer une page d’erreur de base données WordPress personnalisée

« Error establishing a database connection », vous connaissez ? C’est le message par défaut en cas de soucis avec votre base de données MySQL. Apprenons comment utiliser un fichier d’erreur sur-mesure avec WordPress.

N.B : cet article fait suite à un mail que j’ai reçu dernièrement à propos d’un bug sur WordPress Channel. L’erreur n’était pas lié à MySQL mais cette personne m’a indiqué 2 liens très intéressants (en anglais) concernant la création de cette fameuse page d’erreur de base de données personnalisée. J’ai donc librement adapté le premier des 2 à ma façon, dont l’original est accessible sur Digging Into WordPress.

Intérêts d’une page d’erreur

Cette page est essentielle et je trouve dommage que personne ne m’en ait encore parlé… depuis le temps que j’utilise WordPress, je n’avais encore jamais lue d’informations à ce sujet !

  1. Ainsi, le premier avantage consiste à ne pas indiquer au monde entier que vous subissez un problème lié à votre base de données. La planète n’a pas besoin d’être au courant de ce type d’information et encore moins les hackers… un message personnalisé est donc nettement plus intéressant ;
  2. Deuxième point qui rejoint en partie le précédent. Cette page étant entièrement sur-mesure, vous pouvez donc saisir le texte de votre choix et même y ajouter des éléments visuels – un logo, par exemple. Toutefois, rappelons qu’il n’est pas conseillé de surcharger inutilement votre serveur pour le coup ;
  3. Troisième point important du point de vue de Google. Ce fichier PHP va retourner une erreur 503 dans l’en-tête indiquant un problème passager. Les robots de Google ne devrait donc pas indexer cette page et revenir plus tard indexer le reste de votre site ;
  4. Quatrième point capital à mes yeux, vous serez notifié par e-mail dès qu’une erreur surviendra. Très pratique pour surveiller l’apparition de ce type d’erreur et surtout pour n’en manquer aucune ;

Méthode de création détaillée

Une fois de plus, créez un tel fichier d’erreur avec WordPress n’a rien de compliqué !

A l’aide de votre client FTP favori, localisez le dossier /wp-content/. A l’intérieur de celui-ci, créez donc un nouveau fichier que vous nommerez db-error.php.

N.B : n’oubliez pas de modifier l’adresse mail !

Copiez / collez les lignes de code suivantes :

<?php // custom WordPress database error page wpchannel.com
 header('HTTP/1.1 503 Service Temporarily Unavailable');
 header('Status: 503 Service Temporarily Unavailable');
 header('Retry-After: 3600'); // 1 hour = 3600 seconds
 mail("VOTREMAIL_ICI", "Database Bug", "Le site rencontre des soucis techniques (MySQL).", "From: WordPress Channel");

?>
<!DOCTYPE HTML>
<html dir="ltr" lang="fr-FR">
 <head>
 <title>503 Service Temporarily Unavailable</title>
 <style type="text/css">
 h1, p {
 font-family: Helvetica, sans-serif;
 font-size: 24px;
 color: #333;
 }
 p {
 font-size: 14px;
 }
 </style>
 </head>
 <body>
 <h1>C'est quoi ce bug ???</h1>
 <p>Bon ok, j'ai bidouillé ma base de données et j'ai planté le site... pas de soucis, le problème n'est que temporaire ! Ou alors, mon hébergeur rencontre quelques bugs... allez savoir pourquoi !</p>
 </body>
</html>

Il ne vous reste plus qu’à sauvegarder le fichier pour valider le tout. Bien entendu, vous pouvez modifier à votre guise les différents éléments et notamment les lignes de texte humoristiques…

Pour les plus téméraires, vous pouvez vous amuser à planter votre base de données en éditant par exemple le fichier wp-config.php situé à la racine de votre installation WordPress. Supprimez par exemple le mot de passe… et voyez le résultat sur votre blog !

Non seulement, vous verrez la page d’erreur mais vous serez également averti par e-mail d’un bug MySQL.

Capture d'écran - db-error.php
J’ai planté WordPress Channel pour le fun…

Cette technique est donc un moyen supplémentaire de maîtriser les messages d’erreurs qui peuvent survenir sur un site. Dans le même ordre d’idée, vous pouvez créez un modèle de page personnalisé pour les erreurs de type 404 !

Crédits photo : Jon Bishop (spazcer)

31 commentaires

  1. Magic

    Salut,
    Pas mal, ça à l’air vraiment sympa (j’appliquerai cela ce soir sur mes wp).
    Personnelement j’avais juste modifier le fichier (je sais plus son nom) qui contenait le « error etablishing blabla » et changé le message. Mais la ça me plait bien. Thx

  2. Mealin

    Merci beaucoup !

    Etant sur du 000webhost mutualisé et pas encore prêt à payer pour héberger mon site ce genre d’erreur je ne les connais que trop bien …

    Bon allez je retourne personnaliser cette page.

  3. Christophe

    Merci pour le tuyau, toujours aussi utile.
    Attention cependant, le doctype utilisé dans l’exemple est celui du HTML5…
    Penser donc à l’adapter à votre propre doctype.

  4. Mealin

    Avertissement !

    Attention à ce que si un serveur Mysql dont vous vous servez tombe, cette page de donnée ne se transforme pas en outils « mass mail » au yeux de votre hébergeur …

    Je dis juste ça comme ça puisque 000webhost chez qui je suis est dans ce cas, et je viens de me faire suspendre mon compte pour « mass mail » … j’avais 20 petits messages « database bug » dans ma boite indésirables !

    Bref …
    * croisez les doigts pour moi, je ne veux pas passer dans le bac à sable google alors que je viens de relancer mon site T_T *

  5. Aurélien Denis auteur de l’article

    Diantre ! 20 messages et ton hébergeur te considère comme « mass mail »… ça laisse à désirer quand même !

    Sinon, merci pour ce retour d’expérience ! Tu peux enlever la ligne de mail dans le fichier db-error.php pour éviter que ce problème ne se reproduise.

    Par contre, tu perdras cet aspect sympa…

    1. Mealin

      hehe c’est ça quand on ne prend pas un payant !

      Et bien sûr dès qu’ils ont réactivés mon compte (très rapidement ! je peux cracher sur la qualité du service général mais pas celle du service client) j’ai directement viré la ligne mail … à mon grand regret.

      Je vais me trouver un site offre des services de surveillance gratuits ça sera mieux que rien !

      1. Pyraah

        Je sais que je suis « un peu » en retard mais… de mon côté j’ai ajouté une petite condition. Si le fichier « .errmail » n’existe pas, je créé le fichier et j’envoie un mail. Si le fichier existe, je passe cette étape. Comme ça j’envoie le mail une seule fois, ça évite de spammer ma boîte mail :-).

  6. Romain

    Merci pour ce tuto très intéressant, je viens de tester il fonctionne a merveille, par contre oui faut faire attention au Mass Mail car en moins de 2 minutes de (faux) plantage pour le test j’ai reçu 30 mails donc j’imagine si la SQL tombe + de 30 minutes

    Mais bon le fait de recevoir un mail est vraiment important et pratique

    Merci donc !

  7. Lox

    Pour les plus téméraires, vous pouvez vous amuser à planter votre base de données en éditant par exemple le fichier wp-config.php situé à la racine de votre installation WordPress. Supprimez par exemple le mot de passe… et voyez le résultat sur votre blog !

    Sur wordpress 3.0.1 le fait de supprimer le mot de passe n’affiche pas la page db-error.php mais une page standard de wordpress:

    Erreur lors de l’établissement de la connexion à la base de données

  8. Lashon

    Bonjour Aurélien,
    Hier j’ai testé ton fichier et tout semblait fonctionner à merveille. J’ai crashé ma base en changeant le mot de passe sql dans mon fichier config.php et la page d’erreur s’est bien affichée correctement, j’ai bien reçu un mail pour m’en avertir.
    Mais, gros problème. Ce matin, fanta78 m’a gentiment prévenue qu’en laissant un commentaire sur mon blog ou en voulant s’abonner à mon flux rss (feedburner ou le feed de WordPress), il tombait sur une page blanche d’erreur. J’ai refait la même tentative et confirme. Voici l’erreur générée :

    Warning: Cannot modify header information – headers already sent by (output started at /homepages/0/d302159616/htdocs/lashon/wp-config.php:1) in /homepages/0/d302159616/htdocs/lashon/wp-comments-post.php on line 95

    Warning: Cannot modify header information – headers already sent by (output started at /homepages/0/d302159616/htdocs/lashon/wp-config.php:1) in /homepages/0/d302159616/htdocs/lashon/wp-comments-post.php on line 96

    Warning: Cannot modify header information – headers already sent by (output started at /homepages/0/d302159616/htdocs/lashon/wp-config.php:1) in /homepages/0/d302159616/htdocs/lashon/wp-comments-post.php on line 97

    Warning: Cannot modify header information – headers already sent by (output started at /homepages/0/d302159616/htdocs/lashon/wp-config.php:1) in /homepages/0/d302159616/htdocs/lashon/wp-includes/pluggable.php on line 890

    Je vais chercher plus d’infos là-dessus. En attendant, pour me sortir de là il a fallu faire les manips suivantes :

    – Supprimer le fichier db-error.php
    – Renvoyer mon config.php avec de nouvelles clés de sécurité (et en veillant à confirmer l’enregistrement en UTF8 sans bom):
    https://api.wordpress.org/secret-key/1.1/salt/

    sans quoi la suppression seule du fichier db-error ne suffisait pas.
    Voilà pour mon retour.
    Dommage…

    1. Aurélien Denis auteur de l’article

      Merci beaucoup pour ton retour d’expérience !

      Je n’ai pas rencontré ce genre d’erreur dans mon cas… il faut dire que les situations sont nombreuses (thèmes et plugins installés, version de WordPress, etc.) mais je te serais reconnaissant de venir poster ici une éventuelle source d’information à ce propos !

      1. Lashon

        Bien sûr Aurélien, pas le temps de me pencher là-dessus en ce moment mais dès que je le ferai je reviendrai t’informer si j’ai trouvé le problème et solution. Bonne continuation.

  9. Romain

    J’aurais une petite question, ne serait-il pas possible au lieu d’envoyé un message d’erreur par mail d’activer plutôt un script qui permettrait de faire un reboot automatiquement de la base de données tombé dans les choux ?

  10. Mario

    Merci pour ce très bon tutoriel !
    Fonctionne à merveille, bon par contre ouille ouille ça flood la boite gmail heureusement qu’il groupe les conversations

    J’ai simuler un crash 30 seconds plus de 60 mails j’imagine pas pendant 1H

    Bref très bon boulot merci.

  11. shaza

    merci beaucoup de cette astuce, je me cassais la tête à trouver une solution sans toucher au core de wordpress…

    Perso, j’ai plusieurs autoblogs, qui enregistrent des doublons, et mon hébergeur, qui est très très moyen, a une limitation de connexions simultanées à la base, donc qd je lance mon script perso pour débusquer les doublons, j’ai un nombre incroyable d’erreurs.

    En adaptant ce script, ça me permet de ne pas à recharger les pages manuellement…par contre mon système n’est pas fiable en cas de vrai plantage de la base

Laisser un commentaire