Sehr oft werde ich versuchen, ein PHP-Skript auszuführen und nur einen leeren Bildschirm zurück zu bekommen. 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, gebe überall "Echo" -Anweisungen ein usw., um das Problem einzugrenzen. Aber es muss doch einen besseren Weg geben, oder?
Gibt es eine Möglichkeit, PHP dazu zu bringen, eine nützliche Fehlermeldung zu erzeugen, wie es Java tut?
php
debugging
error-handling
Candidasa
quelle
quelle
T_PAAMAYIM_NEKUDOTAYIM
. Oder vielleicht "muss eine Instanz von Integer sein, Integer gegeben" .Antworten:
Bei Syntaxfehlern müssen Sie die Fehleranzeige in der php.ini aktivieren. Standardmäßig sind diese deaktiviert, da ein "Kunde" die Fehlermeldungen nicht sehen soll. Auf dieser Seite in der PHP-Dokumentation finden Sie Informationen zu den beiden Anweisungen:
error_reporting
unddisplay_errors
.display_errors
ist wahrscheinlich derjenige, den Sie ändern möchten. Wenn Sie die php.ini nicht ändern können, können Sie einer .htaccess-Datei auch die folgenden Zeilen hinzufügen:Möglicherweise möchten Sie den Wert von E_ALL (wie von Gumbo erwähnt) für Ihre PHP-Version verwenden
error_reporting
, um alle Fehler zu erhalten. Mehr Info3 weitere Elemente: (1) Sie können die Fehlerprotokolldatei überprüfen, da sie alle Fehler enthält (es sei denn, die Protokollierung wurde deaktiviert). (2) Das Hinzufügen der folgenden 2 Zeilen hilft Ihnen beim Debuggen von Fehlern, die keine Syntaxfehler sind:
(3) Eine andere Option ist die Verwendung eines Editors, der bei der Eingabe nach Fehlern sucht , z. B. PhpEd . PhpEd wird außerdem mit einem Debugger geliefert, der detailliertere Informationen liefern kann. (Der PhpEd-Debugger ist xdebug sehr ähnlich und wird direkt in den Editor integriert, sodass Sie 1 Programm verwenden, um alles zu erledigen.)
Cartmans Link ist auch sehr gut: http://www.ibm.com/developerworks/library/os-debug/
quelle
E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE
. Siehe docs.php.net/manual/en/errorfunc.constants.phpFolgendes aktiviert alle Fehler:
Siehe auch die folgenden Links
quelle
ini_set
eine Zeichenfolge ist.Der folgende Code sollte alle Fehler anzeigen:
Die einzige Möglichkeit, eine leere Seite mit diesem Code zu generieren, besteht darin, dass im Shutdown-Handler ein Fehler auftritt. Ich habe dies von meinem eigenen CMS kopiert und eingefügt, ohne es zu testen, aber ich bin sicher, dass es funktioniert.
quelle
ShutdownHandler
obigen Funktion . Grundsätzlich ist dies ein Not-Aus-Hack anstelle einer ordnungsgemäßen Fehlerbehandlung.E_NOTICE
Fehler in dieser Funktion deaktivieren ?Fehler und Warnungen werden normalerweise in
....\logs\php_error.log
oder....\logs\apache_error.log
abhängig von Ihren php.ini-Einstellungen angezeigt.Auch nützliche Fehler werden häufig an den Browser weitergeleitet, aber da sie kein gültiges HTML sind, werden sie nicht angezeigt.
So
"tail -f
"Ihre Log - Dateien und wenn Sie ein leerer Bildschirm Verwendung IEs bekommen‚Ansicht‘->‚Quelle‘Menüoptionen die rohe Ausgabe anzuzeigen.quelle
php_flag display_errors 1
.Sie können die folgenden Zeilen in die Datei aufnehmen, die Sie debuggen möchten:
Dies überschreibt die Standardeinstellungen in php.ini, wodurch PHP die Fehler nur an das Protokoll meldet.
quelle
PHP-Konfiguration
2 Einträge in der php.ini bestimmen die Ausgabe von Fehlern:
display_errors
error_reporting
In der Produktion ,
display_errors
wird in der Regel aufOff
(was eine gute Sache ist, weil Fehleranzeige in Produktionsstätten im Allgemeinen nicht erwünscht ist!).In der Entwicklung sollte es jedoch auf gesetzt sein
On
, damit Fehler angezeigt werden. Überprüfen Sie !error_reporting
(ab PHP 5.3) ist standardmäßig auf eingestelltE_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
(dh alles wird angezeigt, mit Ausnahme von Hinweisen, strengen Standards und Verfallshinweisen). Stellen Sie im Zweifelsfall so ein,E_ALL
dass alle Fehler angezeigt werden. Überprüfen Sie !Wow wow! Kein Scheck! Ich kann meine php.ini nicht ändern!
Das ist eine Schande. Normalerweise erlauben gemeinsam genutzte Hosts die Änderung ihrer php.ini-Datei nicht. Daher ist diese Option leider nicht verfügbar. Aber keine Angst! Wir haben andere Möglichkeiten !
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!
Diese beiden Zeilen haben den gleichen Effekt wie das Ändern der php.ini-Einträge wie oben! Genial!
Ich bekomme 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 gelangt das Skript nicht einmal zur Laufzeit. Es schlägt beim Kompilieren fehl , was bedeutet, dass die Werte in der php.ini verwendet werden. Wenn Sie diese nicht geändert haben, können Fehler möglicherweise nicht angezeigt werden.
Fehlerprotokolle
Darüber hinaus protokolliert PHP standardmäßig Fehler. Beim Shared Hosting befindet es sich möglicherweise in einem dedizierten Ordner oder im selben Ordner wie das fehlerhafte Skript.
Wenn Sie Zugriff auf php.ini haben, finden Sie es unter dem
error_log
Eintrag.quelle
Es gibt eine wirklich nützliche Erweiterung namens " xdebug ", die Ihre Berichte auch viel schöner macht.
quelle
Ich verwende diese Syntax immer ganz oben im PHP-Skript.
quelle
Für eine schnelle, praktische Fehlerbehebung empfehle ich normalerweise hier auf SO:
am Anfang des Skripts stehen, das unter Fehlerbehebung steht. Dies ist nicht perfekt, die perfekte Variante ist, dass Sie dies auch in aktivieren
php.ini
und die Fehler in PHP protokollieren, um Syntax- und Startfehler abzufangen.Die hier beschriebenen Einstellungen zeigen alle Fehler, Hinweise und Warnungen an, einschließlich strenger, unabhängig von der PHP-Version.
Nächste Dinge zu beachten:
Siehe auch:
error_reporting()
Docsdisplay_errors
Docsquelle
Es ist möglich, einen Hook zu registrieren, um den letzten Fehler oder die letzte Warnung sichtbar zu machen.
Wenn Sie diesen Code am Anfang Ihrer index.php hinzufügen, können Sie die Probleme beheben.
quelle
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 Verwendungini_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 underror_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 Ihreapache.conf
oderhttpd.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, dassdisplay_errors = 1
underror_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 wieini_set('display_errors', 1);
oder stattfindenerror_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 ...
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);
odererror_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 hatdisplay_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 Sieini_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.quelle
Wenn Sie super cool sind, könnten Sie versuchen:
Dies zeigt nur Fehler an, wenn Sie lokal ausgeführt werden. Außerdem erhalten Sie die Variable test_server, die Sie gegebenenfalls an anderen Stellen verwenden können.
Alle Fehler, die auftreten, bevor das Skript ausgeführt wird, werden nicht abgefangen, aber für 99% der Fehler, die ich mache, ist dies kein Problem.
quelle
$_SERVER['REMOTE_HOST']
, überprüfen Sie mit, ob der Client Sie sind.Wählen Sie oben auf der Seite einen Parameter aus
quelle
Um dies beizubehalten und zu vereinfachen, können Sie Ihre Datei php.ini bearbeiten. Es wird normalerweise in
/etc/php.ini
oder gespeichert/etc/php/php.ini
, aberphp.ini
je nach den Einrichtungsrichtlinien Ihres Hosting-Anbieters können mehr lokale Benutzer es überschreiben. Überprüfen Sie einephpinfo()
DateiLoaded Configuration File
oben, um sicherzustellen, welche zuletzt geladen wird.Suchen Sie in dieser Datei nach display_errors. Es sollten nur 3 Instanzen vorhanden sein, von denen 2 kommentiert sind.
Ändern Sie die unkommentierte Zeile in:
quelle
Keine Ahnung, ob es helfen wird, aber hier ist ein Teil meiner Standard-Konfigurationsdatei für PHP-Projekte. Ich neige dazu, nicht zu sehr von den Apache-Konfigurationen abhängig zu sein, selbst von meinem eigenen Server.
Ich habe nie das Problem des verschwindenden Fehlers. Vielleicht gibt Ihnen hier etwas eine Idee.
Bearbeitet, um APPLICATON_LIVE anzuzeigen
quelle
Darüber hinaus können Sie mit xdebug detailliertere Informationen erhalten .
quelle
Ich empfehle Nette Tracy zur besseren Visualisierung von Fehlern und Ausnahmen in PHP:
quelle
quelle
Und aktivieren Sie Anzeigefehler in der php.ini
quelle
Sie können Ihren eigenen Fehlerbehandler in PHP registrieren . Das Speichern aller Fehler in einer Datei kann Ihnen beispielsweise in diesen dunklen Fällen helfen. Beachten Sie, dass Ihre Funktion aufgerufen wird, unabhängig davon, auf was Ihre aktuelle Fehlerberichterstattung eingestellt ist. Sehr einfaches Beispiel:
quelle
Die zwei wichtigsten Zeilen, die Sie benötigen, um nützliche Fehler aus PHP herauszuholen, sind:
Wie von anderen Mitwirkenden hervorgehoben, sind diese aus Sicherheitsgründen standardmäßig deaktiviert. Als nützlicher Tipp: Wenn Sie Ihre Site einrichten, ist es praktisch, einen Wechsel für Ihre verschiedenen Umgebungen vorzunehmen, damit diese Fehler in Ihren lokalen und Entwicklungsumgebungen standardmäßig aktiviert sind. Dies kann mit dem folgenden Code erreicht werden (idealerweise in Ihrer index.php- oder Konfigurationsdatei, damit diese von Anfang an aktiv ist):
quelle
FirePHP kann ebenfalls nützlich sein.
quelle
öffne deine php.ini und stelle sicher, dass sie eingestellt ist auf:
Starten Sie Ihren Server neu.
quelle
Vielleicht möchten Sie auch PHPStorm als Code-Editor ausprobieren. Während der Eingabe im Editor werden viele PHP- und andere Syntaxfehler angezeigt.
quelle
Wenn Sie ein Ubuntu-Benutzer sind, gehen Sie zu Ihrem Terminal und führen Sie diesen Befehl aus
Hier werden die letzten 50 Fehler angezeigt. Es gibt eine
error.log
Fehlerdatei für apache2, die alle Fehler protokolliert.quelle
Fügen Sie Ihrem Skript Folgendes hinzu, um die vollständige Fehlerberichterstattung zu aktivieren:
Dadurch werden auch nur minimale Warnungen angezeigt. Und für alle Fälle:
Erzwingt die Anzeige von Fehlern. Dies sollte auf Produktionsservern deaktiviert sein, jedoch nicht während der Entwicklung.
quelle
Die „FEHLER“ sind die nützlichsten Dinge für die Entwickler, um ihre Fehler zu kennen und sie zu beheben, damit das System perfekt funktioniert.
PHP bietet einige bessere Möglichkeiten, um die Entwickler zu kennen, warum und wo ihr Code die Fehler enthält. Wenn Entwickler diese Fehler kennen, können sie ihren Code auf viele Arten verbessern.
Beste Möglichkeiten, um die folgenden zwei Zeilen oben im Skript zu schreiben, um alle Fehlermeldungen zu erhalten:
Eine andere Möglichkeit, Debugger-Tools wie xdebug in Ihrer IDE zu verwenden.
quelle
Sie können die vollständige Fehlerberichterstattung aktivieren (einschließlich Hinweisen und strengen Meldungen). Einige Leute finden das zu ausführlich, aber es ist einen Versuch wert. Setzen Sie
error_reporting
aufE_ALL | E_STRICT
in der php.ini.E_STRICT
benachrichtigt Sie über veraltete Funktionen und gibt Ihnen Empfehlungen zu den besten Methoden für bestimmte Aufgaben.Wenn Sie keine Benachrichtigungen wünschen, andere Nachrichtentypen jedoch hilfreich finden, schließen Sie Benachrichtigungen aus:
display_errors
Stellen Sie außerdem sicher, dass dies in der php.ini aktiviert ist. Wenn Ihre PHP-Version älter als 5.2.4 ist, stellen Sie Folgendes einOn
:Wenn Ihre Version 5.2.4 oder neuer ist, verwenden Sie:
quelle
Abgesehen von error_reporting und der Einstellung display_errors ini können Sie SYNTAX-Fehler aus den Protokolldateien Ihres Webservers abrufen. Wenn ich PHP entwickle, lade ich die Webserver-Protokolle meines Entwicklungssystems in meinen Editor. Immer wenn ich eine Seite teste und einen leeren Bildschirm erhalte, wird die Protokolldatei veraltet und mein Editor fragt, ob ich sie neu laden möchte. Wenn ich das tue, springe ich nach unten und es gibt einen Syntaxfehler. Zum Beispiel:
quelle
Für diejenigen, die Nginx verwenden und einen weißen Bildschirm haben, auch für Dateien mit
<?php echo 123;
. In meinem Fall hatte ich diese erforderliche Option für PHP in der Nginx-Konfigurationsdatei nicht:Diese Option war nicht in der Datei fastcgi_params enthalten, daher funktionierte PHP nicht und es gab keine Fehler in den Protokollen.
quelle