🚀 Configuration immédiate : Le code essentiel
Pour afficher toutes les erreurs PHP pendant le développement, ajoutez ces trois lignes au début de votre script :
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);
Cette configuration active le signalement complet des erreurs (error_reporting) et leur affichage à l’écran (display_errors), incluant les erreurs survenant au démarrage de PHP.
📋 Comprendre les trois directives essentielles
| Directive | Fonction | Valeur recommandée |
|---|---|---|
error_reporting |
Définit quels types d’erreurs sont signalés | E_ALL ou -1 |
display_errors |
Contrôle l’affichage des erreurs à l’écran | On ou 1 |
display_startup_errors |
Affiche les erreurs lors du démarrage PHP | On ou 1 |
🔍 Le système error_reporting E_ALL en détail
La fonction error_reporting(E_ALL) utilise un système de masque binaire pour capturer tous les types d’erreurs PHP :
- E_ERROR : Erreurs fatales qui arrêtent l’exécution
- E_WARNING : Avertissements non fataux
- E_NOTICE : Notifications pour les pratiques douteuses
- E_DEPRECATED : Fonctionnalités obsolètes
- E_STRICT : Suggestions d’amélioration du code
💡 Astuce : Depuis PHP 8.0, E_ALL est la valeur par défaut d’error_reporting, contrairement aux versions antérieures qui excluaient les erreurs deprecated et strict.
⚙️ Méthodes de configuration selon votre environnement
Configuration dans le script PHP
La méthode la plus rapide pour activer l’affichage d’erreurs :
<?php
// Configuration de débogage complète
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
ini_set('log_errors', '1');
error_reporting(E_ALL);
// Alternative avec error_reporting(-1)
// error_reporting(-1);
// Votre code ici
?>
Configuration globale via php.ini
Pour une configuration permanente, modifiez votre fichier php.ini :
display_errors = On
display_startup_errors = On
error_reporting = E_ALL
log_errors = On
Localisez votre fichier php.ini avec phpinfo() et redémarrez votre serveur web après modification.
Configuration Apache (.htaccess)
Pour les serveurs Apache avec mod_php :
php_flag display_errors On
php_flag display_startup_errors On
php_value error_reporting E_ALL
🔐 Sécurité : Développement vs Production
⚠️ Attention : N’activez jamais display_errors en production ! Les messages d’erreur peuvent révéler des informations sensibles sur votre architecture.
Configuration pour la production
// Configuration production sécurisée
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/path/to/error.log');
error_reporting(E_ALL);
🛠️ Template de débogage complet
Voici un script de test complet pour valider votre configuration :
<?php
// Template de débogage PHP complet
ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
ini_set('log_errors', '1');
error_reporting(E_ALL);
// Test des différents types d'erreurs
echo "Configuration active :n";
echo "display_errors: " . ini_get('display_errors') . "n";
echo "error_reporting: " . ini_get('error_reporting') . "n";
// Test notice
echo $variable_inexistante;
// Test warning
include 'fichier_inexistant.php';
// Test deprecated (exemple selon version PHP)
// split('/', 'test/string');
?>
🔧 Résolution des problèmes courants
Les erreurs ne s’affichent toujours pas ?
- Erreurs de syntaxe : Elles empêchent l’exécution du script, donc ini_set() ne fonctionne pas
- Erreurs fatales : Configurez directement dans php.ini ou .htaccess
- Cache serveur : Redémarrez votre serveur web après les modifications
Différences entre versions PHP
PHP 8.0+ inclut automatiquement toutes les erreurs dans E_ALL, contrairement aux versions antérieures qui nécessitaient :
// Pour PHP < 8.0
error_reporting(E_ALL | E_STRICT | E_DEPRECATED);
📚 FAQ : Questions fréquentes
Quelle est la différence entre error_reporting et display_errors ?
error_reporting détermine quels types d'erreurs PHP doit signaler, tandis que display_errors contrôle si ces erreurs sont affichées à l'écran ou non.
Puis-je utiliser error_reporting(-1) au lieu de E_ALL ?
Oui, error_reporting(-1) est équivalent à E_ALL et active tous les types d'erreurs. Certains développeurs préfèrent cette syntaxe pour sa clarté.
Pourquoi certaines erreurs n'apparaissent pas avec ma configuration ?
Les erreurs de syntaxe ou fatales qui surviennent avant l'exécution de ini_set() ne peuvent pas être capturées par cette méthode. Utilisez plutôt la configuration php.ini ou .htaccess.
Comment désactiver l'affichage d'erreurs spécifiques ?
Utilisez l'opérateur binaire pour exclure certains types : error_reporting(E_ALL & ~E_NOTICE) affiche toutes les erreurs sauf les notices.
Est-il sécurisé d'activer display_errors en production ?
Non, jamais. Les messages d'erreur peuvent révéler des chemins de fichiers, des informations de base de données et d'autres détails sensibles. Utilisez plutôt log_errors pour enregistrer les erreurs dans un fichier.