« Écran blanc de la mort » en PHP : comment faire parler les erreurs ?
Chaque développeur PHP a déjà vécu cette situation : le code semble fonctionner, mais l'écran reste vide. Aucun message, aucun avertissement. Juste une page blanche et un sentiment de légère folie. Vous reconnaissez ? C'est le classique « écran blanc de la mort » (White Screen of Death — WSOD). Le plus souvent, le problème vient du fait que l'affichage des erreurs PHP est désactivé.
Sur Stack Overflow, la question « How do I get PHP errors to display? » a recueilli des milliers de vues. Et ce n'est pas un hasard : la configuration de l'affichage des erreurs est une base que tout le monde doit connaître. Mais simplement activer display_errors ne suffit pas. Il faut comprendre comment cela affecte les performances et la sécurité de votre application.
Dans cet article, nous allons voir :
- Comment activer les erreurs PHP dans différents environnements (local, serveur, frameworks) ;
- Comment configurer
error_reportingpour un débogage optimal ; - Pourquoi afficher les erreurs en production est une mauvaise idée ;
- Comment journaliser les erreurs sans perte de performance.
C'est parti !
Pourquoi PHP n'affiche-t-il pas les erreurs ? Trois raisons principales
Avant de plonger dans le code, comprenons pourquoi les erreurs peuvent être masquées. PHP est un langage flexible, et son comportement dépend des paramètres de php.ini, du script lui-même et de l'environnement serveur.
1. Paramètres de php.ini
Le principal responsable est la directive display_errors. Par défaut, sur de nombreux hébergements, elle est réglée sur Off. Cela est fait pour des raisons de sécurité : en production, afficher la pile d'appels à l'utilisateur est une mauvaise pratique.
2. La fonction error_reporting()
Même si display_errors est activé, le niveau d'erreur peut être trop bas. Par exemple, error_reporting(0) masquera tout. Ou vous pouvez accidentellement filtrer certains types d'erreurs (E_NOTICE, E_WARNING).
3. Erreurs avant l'exécution du script
Les plus sournoises sont les erreurs de syntaxe dans php.ini ou dans les fichiers inclus. Si PHP ne peut même pas lancer le script, il n'atteindra pas vos paramètres. Dans ces cas, la vérification de la syntaxe via la console aide : php -l file.php.
Comment activer l'affichage des erreurs PHP : guide étape par étape
Méthode 1. Modification de php.ini (paramètres permanents)
La méthode la plus fiable est de modifier le fichier php.ini. Trouvez le fichier (il se trouve généralement dans /etc/php/ ou /usr/local/etc/php/) et définissez :
display_errors = Onerror_reporting = E_ALLAprès les modifications, redémarrez impérativement le serveur :
sudo service apache2 restart# ou pour nginx + php-fpm :sudo service php8.1-fpm restartAvantages : le paramètre s'applique à tous les scripts du serveur.
Inconvénients : nécessite un accès au serveur ; ne convient pas à l'hébergement mutualisé.
Méthode 2. Via .htaccess (pour Apache)
Si vous n'avez pas accès à php.ini mais que vous utilisez Apache, utilisez .htaccess :
php_flag display_errors onphp_value error_reporting 32767 # E_ALLImportant : cette méthode fonctionne si la directive AllowOverride est activée sur le serveur.
Méthode 3. Directement dans le script (pour le débogage)
L'option la plus flexible est d'activer les erreurs dans un fichier spécifique. Idéal pour le développement :
<?phpini_set('display_errors', 1);ini_set('display_startup_errors', 1);error_reporting(E_ALL);
// Votre codeecho $undefined_variable; // Provoque une Notice?>Notez display_startup_errors — il capture les erreurs survenant avant l'exécution du script (par exemple, lors de l'inclusion de fichiers).
Méthode 4. Spécificités des frameworks (Laravel, Symfony, WordPress)
Les frameworks modernes ont leurs propres mécanismes. Dans Laravel
Blogs
Book Recommendations
Lire aussi
GraphQL vs REST en Go : que choisir en 2025
Expressions régulières en PHP avec exemples : guide complet pour débutants
Java au hackathon : comment gagner avec du code et une idée
Débogage de code Kotlin : techniques avancées et outils pour les pros
TypeScript: Interfaces vs Types — que choisir en 2024 ?