Tout guide sur un problème PHP commence par « activez display_errors ». Sur un site en production, cela imprime vos chemins de fichiers, votre framework, parfois le nom de votre base, à quiconque peut faire planter la page - y compris à celui qui est en train d'essayer.
Les bons réglages en production
display_errors = Off
display_startup_errors = Off
log_errors = On
error_log = /var/log/php/mysite-error.log
error_reporting = E_ALL & ~E_DEPRECATED
E_ALL sans les dépréciations garde le journal lisible sur une base de code ancienne tout en enregistrant tout ce qui ne va vraiment pas.
Le regarder pendant que vous reproduisez
tail -f /var/log/php/mysite-error.log
Laissez cela tourner et chargez la page cassée. Vous obtenez exactement ce que display_errors aurait affiché, au même instant, sans qu'aucun visiteur ne le voie.
S'il vous le faut absolument dans le navigateur
Ne le montrez qu'à vous-même, par adresse :
if ((@$_SERVER["REMOTE_ADDR"] ?? "") === "YOUR.IP.HERE") {
ini_set("display_errors", "1");
error_reporting(E_ALL);
}
Mettez cela derrière une condition que vous ne pouvez pas oublier de retirer - une constante dans un fichier de configuration non déployé, pas une ligne commentée. Une ligne commentée finit par être décommentée.
Un journal qui grossit trop vite
sort /var/log/php/mysite-error.log | uniq -c | sort -rn | head -5
Une notice à chaque requête écrit des gigaoctets en une journée. La première ligne de cette sortie est presque toujours tout le problème.
Réactivez les dépréciations une journée avant une montée de version de PHP. Ce sont les avertissements qui deviennent des erreurs dans la version suivante, et les lire tôt est la préparation la moins chère qui soit.