Gestion erreurs PHP avec Nginx et PHP-FPM

Nginx et son compère PHP-FPM forment une superbe alternative au couple Apache + mod_php. Robuste, rapide, simple à configurer. Il n'y a qu'une chose qui m'embêtait jusqu'ici : quand PHP rencontre une erreur fatale (erreur de syntaxe dans un script par exemple), on a droit à une magnifique page blanche avec un code 200. Pas l'idéal pour déboguer et pas trop sympa pour l'utilisateur qui doit se demander ce qui se passe.

Et puis j'ai fait ce que j'aurais du faire depuis longtemps : lire la documentation associée à PHP-FPM (RTFM). Ce dernier fournit une directive de configuration nommée fastcgi.error_header à placer dans php.ini qui permet de définir un en-tête qui sera envoyé en cas d'erreur :


; Dans php.ini
fastcgi.error_header = "HTTP/1.0 550 Script Error"

On peut ensuite demander à Nginx d'associer ce code avec une URI :


# Dans nginx.conf
server {
[..]
error_page 550 /550.html;
[..]
}

On peut afficher de cette façon une page plus explicative pour l'utilisateur et pour le débogage. On peut également utiliser un script PHP pour enregistrer l'erreur dans un journal (en plus de php.log).

Vous pouvez tester le fonctionnement avec le script PHP suivant qui comporte une erreur de syntaxe :


<?php
echo echo

PS : si vous voulez tester Nginx + PHP-FPM, je vous recommande cet excellent tutoriel écrit par Frank DENIS sur le sujet : http://download.pureftpd.org/docs/configuration_nginx_php.pdf

Etiquettes:

Ajouter un commentaire