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.