Jede Anleitung zu einem PHP-Problem beginnt mit "display_errors einschalten". Auf einer Live-Website druckt das Ihre Dateipfade, Ihr Framework, manchmal Ihren Datenbanknamen für jeden aus, der die Seite zum Fehler bringen kann - auch für den, der es gerade versucht.
Die richtigen Einstellungen für den Livebetrieb
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 ohne Deprecations hält das Log bei einer älteren Codebasis lesbar und schreibt trotzdem alles mit, was wirklich falsch ist.
Zuschauen, während Sie den Fehler nachstellen
tail -f /var/log/php/mysite-error.log
Lassen Sie das laufen und rufen Sie die kaputte Seite auf. Sie bekommen genau die Angaben, die display_errors gezeigt hätte, im selben Moment, ohne dass je ein Besucher sie sieht.
Wenn es unbedingt im Browser sein muss
Zeigen Sie es nur sich selbst, nach Adresse:
if ((@$_SERVER["REMOTE_ADDR"] ?? "") === "YOUR.IP.HERE") {
ini_set("display_errors", "1");
error_reporting(E_ALL);
}
Setzen Sie das hinter eine Prüfung, deren Entfernung Sie nicht vergessen können - eine Konstante in einer Konfigurationsdatei, die nicht ausgerollt wird, keine auskommentierte Zeile. Eine auskommentierte Zeile wird wieder einkommentiert.
Ein Log, das zu schnell wächst
sort /var/log/php/mysite-error.log | uniq -c | sort -rn | head -5
Ein Hinweis bei jeder Anfrage schreibt an einem Tag Gigabytes. Die oberste Zeile dieser Ausgabe ist fast immer das ganze Problem.
Schalten Sie Deprecations vor einem PHP-Upgrade für einen Tag wieder ein. Es sind die Warnungen, die in der nächsten Version zu Fehlern werden, und sie früh zu lesen ist die billigste Vorbereitung, die es gibt.