Résoudre les problèmes

Enregistrer les erreurs PHP pour un fichier précis

Vérifié le 3 min de lecture débogage PHP

Dans les applications en production, l'affichage des erreurs doit rester désactivé pour ne pas révéler de chemins, de requêtes ni d'autres données internes aux visiteurs.

Faites le débogage de préférence dans un environnement de staging qui reproduit le problème. Si vous devez exceptionnellement diagnostiquer un fichier en production et que PHP parvient à l'exécuter, gardez display_errors désactivé et envoyez les erreurs vers un journal privé en dehors de public_html :

error_reporting(E_ALL);
ini_set('display_errors', '0');
ini_set('log_errors', '1');
ini_set('error_log', '/home/CPANEL_USUARIO/logs/php-debug.log');

error_reporting définit les erreurs qui seront enregistrées et E_ALL applique le niveau maximal.

Ces directives s'appliquent pendant l'exécution. Elles ne peuvent pas enregistrer une erreur de syntaxe ou de compilation du même fichier si cette erreur empêche PHP de les exécuter. Dans ce cas, activez d'abord le journal pour la version effective de PHP depuis cPanel, ou utilisez un fichier auxiliaire valide qui applique ces directives puis inclut le fichier à vérifier.

Avant le test, créez le répertoire en dehors de la racine web et protégez le fichier avec les permissions 0600. Limitez la capture au temps strictement nécessaire et évitez d'enregistrer des données sensibles.

À la fin, supprimez ces lignes du fichier, vérifiez que display_errors est toujours désactivé et effacez le journal lorsqu'il n'est plus nécessaire au diagnostic.

Portée réelle de ces lignes

Même si vous les placez dans un fichier précis, les réglages s'appliquent au reste de cette exécution PHP, y compris aux fichiers chargés ensuite ; ils ne filtrent pas le journal pour n'y faire apparaître que les erreurs de ce fichier. Si vous devez circonscrire le test, utilisez une requête contrôlée et filtrez ses entrées par heure et par chemin.

Ajoutez le code à un emplacement valide pour PHP : une déclaration declare(strict_types=1) ou un namespace peut imposer une position. N'ajoutez pas automatiquement des instructions au début de n'importe quel fichier. Validez la syntaxe avec la même version de PHP avant de reproduire l'erreur.

Cela peut aussi vous aider

Quelque chose cloche ou a changé ? Racontez-nous et nous le vérifions.