Dies ist ein Problem der Konfiguration im Vergleich zur Laufzeit
Es ist wichtig zu erkennen, dass während des Kompilierungs- oder Parsing- Schritts ein Syntax- oder Analysefehler auftritt. Dies bedeutet, dass PHP abgebrochen wird, bevor es überhaupt die Möglichkeit hat, Ihren Code auszuführen. Wenn Sie also die PHP- display_errors
Konfiguration zur Laufzeit ändern (dies umfasst alles von der Verwendung ini_set
in Ihrem Code bis zur Verwendung von .htaccess, einer Laufzeitkonfigurationsdatei), werden nur die standardmäßig geladenen Konfigurationseinstellungen verwendet .
So vermeiden Sie WSOD in der Entwicklung immer
Um zu vermeiden , eine WSOD Sie sicherstellen möchten , dass Ihre geladene Konfigurationsdatei hat display_errors
auf und error_reporting
Satz -1
( dies entspricht E_ALL , weil es alle Bits gewährleistet , eingeschaltet sind , unabhängig davon , welche Version von PHP Sie laufen ). Codieren Sie den konstanten Wert von E_ALL nicht fest, da sich dieser Wert zwischen verschiedenen PHP-Versionen ändern kann.
Die geladene Konfiguration ist entweder Ihre geladene php.ini
Datei oder Ihre apache.conf
oder httpd.conf
oder die virtuelle Hostdatei. Diese Dateien werden während der Startphase nur einmal gelesen (wenn Sie beispielsweise Apache httpd oder php-fpm zum ersten Mal starten) und nur durch Änderungen der Laufzeitkonfiguration überschrieben. Wenn Sie sicherstellen, dass display_errors = 1
und error_reporting = -1
in Ihrer geladenen Konfigurationsdatei sichergestellt ist, dass Sie niemals ein WSOD sehen, unabhängig von der Syntax oder dem Analysefehler , die auftreten, bevor eine Laufzeitänderung wie ini_set('display_errors', 1);
oder stattfinden error_reporting(E_ALL);
kann.
So finden Sie Ihre (php.ini) geladenen Konfigurationsdateien
Um Ihre geladenen Konfigurationsdateien zu finden, erstellen Sie einfach eine neue PHP-Datei mit nur dem folgenden Code ...
<?php
phpinfo();
Zeigen Sie dann mit Ihrem Browser dorthin und sehen Sie sich die analysierten geladenen Konfigurationsdateien und zusätzlichen INI-Dateien an , die sich normalerweise oben in Ihrem befinden phpinfo()
und den absoluten Pfad zu allen geladenen Konfigurationsdateien enthalten.
Wenn Sie (none)
anstelle der Datei sehen, bedeutet dies, dass Sie keine php.ini im Pfad der Konfigurationsdatei (php.ini) haben . Sie können also die mit PHP gelieferte stock php.ini von hier herunterladen und als php.ini in Ihren Konfigurationsdateipfad kopieren. Stellen Sie dann sicher, dass Ihr PHP-Benutzer über ausreichende Berechtigungen zum Lesen aus dieser Datei verfügt. Sie müssen httpd oder php-fpm neu starten, um es zu laden. Denken Sie daran, dass dies die Entwicklungsdatei php.ini ist, die mit der PHP-Quelle geliefert wird. Also bitte nicht in der Produktion verwenden!
Mach das einfach nicht in der Produktion
Dies ist wirklich der beste Weg, um ein WSOD in der Entwicklung zu vermeiden. Jeder, der vorschlägt, dass Sie Ihr PHP-Skript an die Spitze ini_set('display_errors', 1);
oder error_reporting(E_ALL);
in Ihr PHP-Skript setzen oder .htaccess wie hier verwenden, hilft Ihnen nicht dabei, ein WSOD zu vermeiden, wenn ein Syntax- oder Analysefehler auftritt (wie in Ihrem Fall hier), wenn Ihre Konfigurationsdatei geladen ist hat display_errors
ausgeschaltet.
Viele Leute (und display_errors
Standardinstallationen von PHP) verwenden eine Production-INI-Datei, die standardmäßig deaktiviert ist, was normalerweise zu derselben Frustration führt, die Sie hier erlebt haben. Da PHP es beim Start bereits deaktiviert hat, tritt ein Syntax- oder Analysefehler auf und es wird nichts ausgegeben. Sie erwarten, dass Sie ini_set('display_errors',1);
oben in Ihrem PHP-Skript dies hätten vermeiden sollen, aber es spielt keine Rolle, ob PHP Ihren Code nicht analysieren kann, da er niemals die Laufzeit erreicht hat.