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

Poster un nouveau commentaire

Le contenu de ce champ ne sera pas montré publiquement. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.
CAPTCHA
La vérification ne tient pas compte des minuscules ou des majuscules.
Image CAPTCHA
Enter the characters shown in the image.