Ziemlich oft versuche ich, ein PHP-Skript auszuführen und bekomme nur einen leeren Bildschirm zurück. Keine Fehlermeldung; nur ein leerer Bildschirm. Die Ursache könnte ein einfacher Syntaxfehler (falsche Klammer, fehlendes Semikolon) oder ein fehlgeschlagener Funktionsaufruf oder etwas ganz anderes gewesen sein.
Es ist sehr schwierig herauszufinden, was schief gelaufen ist. Am Ende kommentiere ich Code aus, füge überall “Echo” -Anweisungen ein usw. und versuche, das Problem einzugrenzen. Aber es muss sicher einen besseren Weg geben, oder?
Gibt es eine Möglichkeit, PHP dazu zu bringen, eine nützliche Fehlermeldung zu erzeugen, wie es Java tut?
Folgendes aktiviert alle Fehler:
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);
Siehe auch die folgenden Links
Sie können die folgenden Zeilen in die Datei einfügen, die Sie debuggen möchten:
error_reporting(E_ALL);
ini_set('display_errors', '1');
Dies überschreibt die Standardeinstellungen in php.ini, die PHP lediglich veranlassen, die Fehler an das Protokoll zu melden.
Fehler und Warnungen erscheinen normalerweise in ....\logs\php_error.log
oder ....\logs\apache_error.log
abhängig von Ihren php.ini-Einstellungen.
Auch nützliche Fehler werden oft an den Browser weitergeleitet, aber da es sich nicht um gültiges HTML handelt, werden sie nicht angezeigt.
Damit "tail -f
” Ihre Protokolldateien und wenn Sie einen leeren Bildschirm erhalten, verwenden Sie die Menüoptionen “Ansicht” -> “Quelle” von IEs, um die Rohausgabe anzuzeigen.
PHP-Konfiguration
2 Einträge in der php.ini bestimmen die Ausgabe von Fehlern:
display_errors
error_reporting
Im Produktion, display_errors
ist normalerweise eingestellt Off
(Was auch gut so ist, denn eine Fehleranzeige in Produktionsstätten ist generell nicht erwünscht!).
Allerdings hinein Entwicklungsollte eingestellt werden On
damit Fehler angezeigt werden. Überprüfen!
error_reporting
(ab PHP 5.3) ist standardmäßig auf eingestellt E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
(d.h. es wird alles außer Hinweisen, strengen Standards und Abwertungshinweisen angezeigt). Stellen Sie es im Zweifelsfall auf ein E_ALL
anzuzeigen alle Die Fehler. Überprüfen!
Wow wow! Kein Scheck! Ich kann meine php.ini nicht ändern!
Das ist eine Schande. Normalerweise erlauben gemeinsam genutzte Hosts keine Änderung ihrer php.ini-Datei, daher ist diese Option leider nicht verfügbar. Aber keine Angst! Wir haben andere Optionen!
Laufzeitkonfiguration
Im gewünschten Skript können wir die php.ini-Einträge zur Laufzeit ändern! Das heißt, es wird ausgeführt, wenn das Skript ausgeführt wird! Süss!
error_reporting(E_ALL);
ini_set("display_errors", "On");
Diese beiden Zeilen haben den gleichen Effekt wie das Ändern der php.ini-Einträge wie oben! Fantastisch!
Ich erhalte immer noch eine leere Seite/500-Fehler!
Das bedeutet, dass das Skript noch nicht einmal ausgeführt wurde! Das passiert normalerweise, wenn Sie einen Syntaxfehler haben!
Bei Syntaxfehlern kommt das Skript erst gar nicht zur Laufzeit. Es scheitert an Kompilierzeitwas bedeutet, dass es die Werte in php.ini verwendet, was, wenn Sie es nicht geändert hätten, möglicherweise keine Anzeige von Fehlern zulässt.
Fehlerprotokolle
Außerdem protokolliert PHP standardmäßig Fehler. Beim Shared Hosting kann es sich in einem dedizierten Ordner oder im selben Ordner wie das anstößige Skript befinden.
Wenn Sie Zugriff auf die php.ini haben, finden Sie diese unter der error_log
Eintrag.
codierung.smashingmagazine.com/2011/11/30/…
– Alex
15. Juli 2012 um 14:54 Uhr
@JuannStrauss, das ist untertrieben. Und wenn du endlich siehe die Fehler, heißt es
T_PAAMAYIM_NEKUDOTAYIM
. Oder vielleicht “muss eine Instanz von Integer sein, Integer gegeben”.– Schrittmacher
3. April 2015 um 20:02 Uhr
Tutorium dazu: code2real.blogspot.com/2015/06/…
– Schüler
9. September 2015 um 7:21 Uhr
Wenn Sie einen Parsing-Fehler haben, funktioniert keiner davon auf vielen Webhosts, und Sie haben möglicherweise keinen Zugriff auf die Fehlerprotokolle. Sie müssen PHP auf Ihrem lokalen Computer (XAMPP unter Windows usw.) installieren und eine Befehlszeilen-Synax-Prüfung durchführen
php.exe -l <your file name>
– Matthäus Lock
17. August 2021 um 10:32 Uhr