2000 Stimmen

Wie kann ich PHP-Fehler anzeigen lassen?

Ich habe meine PHP ini-Datei (php.ini) überprüft und display_errors ist eingestellt und auch die Fehlermeldung ist auf E_ALL gesetzt. Ich habe meinen Apache-Webserver neu gestartet.

Ich habe sogar diese Zeilen an den Anfang meines Skripts gesetzt, und es fängt nicht einmal einfache Syntaxfehler auf. Zum Beispiel, ich deklariere Variablen mit einem "$" und schließe Anweisungen nicht mit dem Zeichen ";" ab. Aber alle meine Skripts zeigen eine leere Seite bei diesen Fehlern, ich möchte jedoch tatsächlich die Fehlermeldungen in meiner Browserausgabe sehen.

error_reporting(E_ALL);
ini_set('display_errors', 1);

Was bleibt noch zu tun?

10 Stimmen

Ich habe noch nicht genau herausgefunden, warum dies manchmal funktioniert und manchmal nicht, aber für alle, die Fehler in einem PHP-Skript schnell umschalten möchten (oder sie über einen $_REQUEST -Parameter aktivieren möchten), werden diese beiden Zeilen die meiste Zeit funktionieren.

0 Stimmen

Du kannst die Details des Fehlers sehen, indem du xdebug in der php.ini-Datei aktivierst.

1 Stimmen

Die meisten spezifischen Editoren / IDEs wie z.B. Notepad++, Eclipse verfügen über eine integrierte Syntaxprüfung und -hervorhebung. Sie zeigen Ihnen Probleme an, wie Sie sie beschrieben haben. Bitte schalten Sie die Anzeige von Fehlern nicht auf einem Live-System ein. Hacker werden dies lieben, denn in den meisten Fällen werden Pfade angezeigt. Sie können einen Fehler- / Ausnahmehandler definieren. In diesem Handler könnten Sie das Problem protokollieren und eine E-Mail an den Entwickler senden, damit er es sofort beheben kann, wenn ein Problem auftritt. Siehe php.net/manual/en/function.set-error-handler.php und php.net/manual/en/function.set-exception-handler.php

3581voto

Fancy John Punkte 36477

Entwicklungsumgebung

Dies funktioniert immer für mich:

ini_set('display_errors', '1');
ini_set('display_startup_errors', '1');
error_reporting(E_ALL);

Allerdings führt dies nicht dazu, dass PHP Syntaxfehler im selben File angezeigt werden. Außerdem können diese Einstellungen von PHP außer Kraft gesetzt werden. In solchen Fällen ist der einzige Weg, um diese Fehler anzuzeigen, die Modifikation Ihrer php.ini (oder php-fpm.conf) mit dieser Zeile:

display_errors = on

(wenn Sie keinen Zugriff auf php.ini haben, könnte es auch funktionieren, diese Zeile in .htaccess einzufügen):

php_flag display_errors 1

Produktionsumgebung

Beachten Sie, dass die obige Empfehlung nur für die Entwicklungsumgebung geeignet ist. Auf einer Live-Seite muss es

display_errors = off
log_errors = on

sein und dann können Sie alle Fehler im Fehlerprotokoll sehen. Siehe Wo finde ich das PHP Fehlerprotokoll

AJAX-Aufrufe

Im Falle eines AJAX-Aufrufs, auf einem DEV-Server, öffnen Sie DevTools (F12) und gehen Sie dann zum Netzwerk-Tab. Starten Sie dann die Anfrage, deren Ergebnis Sie sehen möchten, und sie wird im Netzwerk-Tab angezeigt. Klicken Sie darauf und wechseln Sie dann zum Antwort-Tab. Dort sehen Sie die genaue Ausgabe.

Auf einem Live-Server überprüfen Sie einfach das Fehlerprotokoll genauso.

11 Stimmen

Auch beachten Sie, dass Sie diese 3 Zeilen verwenden können, und dann include('fileImWorkingOn.php');. Dann können Sie auch die Syntaxfehler auffangen!

18 Stimmen

Während ich kein SysOps bin, glaube ich, dass mehr Leute eine .htaccess-Datei haben als php.ini, und diese würden beide vor dem Parsen kommen, richtig? php_flag display_errors 1 für .htaccess

1 Stimmen

Also, wo landen die Fehlermeldungen jetzt, nachdem sie protokolliert wurden? Ich ging zu /var/log/apache2 und es zeigt alle Protokolle an, aber es gibt keine Informationen über das Programm, das ich kürzlich ausgeführt habe. Ich erhalte nur Informationen über Systemneustarts jeden Morgen.

166voto

Michael Madsen Punkte 52883

Sie können Fehler beim Parsen nicht in derselben Datei abfangen, in der die Fehlerausgabe zur Laufzeit aktiviert ist, da die Datei geparst wird, bevor tatsächlich irgendetwas ausgeführt wird (und da es dabei zu einem Fehler kommt, wird nichts ausgeführt). Sie müssen die tatsächliche Serverkonfiguration ändern, damit `display_errors` aktiviert ist und das entsprechende `error_reporting`-Level verwendet wird. Wenn Sie keinen Zugriff auf php.ini haben, können Sie möglicherweise .htaccess oder ähnliches verwenden, abhängig vom Server.

Diese Frage bietet möglicherweise weitere Informationen.

161voto

user1803477 Punkte 1553

Innerhalb Ihrer php.ini:

display_errors = an 

Dann starten Sie Ihren Webserver neu.

9 Stimmen

+. Auf meinem Ubuntu /etc/php5/apache2/php.ini

7 Stimmen

Für neustart (Debian, Ubuntu, etc.) sudo service apache2 restart

4 Stimmen

Für Neustart auf OS X sudo apachectl -k restart.

111voto

andre Punkte 1781

Um alle Fehler anzuzeigen, müssen Sie:

1. Diese Zeilen im PHP-Skript haben, das Sie vom Browser aus aufrufen (normalerweise index.php):

error_reporting(E_ALL);
ini_set('display_errors', '1');

2.(a) Stellen Sie sicher, dass dieses Skript keine Syntaxfehler hat

—oder—

2.(b) Setzen Sie display_errors = On in Ihrer php.ini

Andernfalls kann es nicht einmal diese 2 Zeilen ausführen!

Sie können Syntaxfehler in Ihrem Skript überprüfen, indem Sie (auf der Befehlszeile) ausführen:

php -l index.php

Wenn Sie das Skript von einem anderen PHP-Skript einschließen, werden Syntaxfehler im eingeschlossenen Skript angezeigt. Zum Beispiel:

index.php

error_reporting(E_ALL);
ini_set('display_errors', '1');

// Alle Syntaxfehler hier führen zu einem leeren Bildschirm im Browser

include 'my_script.php';

my_script.php

adjfkj // Dieser Syntaxfehler wird im Browser angezeigt

0 Stimmen

Alles, was ich bekomme, wenn ich php -l phpfilename.php ausführe, ist eine Meldung, die besagt "Fehler beim Parsen von sql_lab.php". Es sagt mir nicht, welche Fehler es gibt.

0 Stimmen

Zusätzlich zum leeren Bildschirm wird ein Fehler 500 zurückgegeben, was viel sicherer zu messen ist als einfach kein Inhalt.

55voto

Kalhua Punkte 551

Einige Web-Hosting-Anbieter ermöglichen es Ihnen, PHP-Parameter in der .htaccess-Datei zu ändern.

Sie können die folgende Zeile hinzufügen:

php_value display_errors 1

Ich hatte das gleiche Problem wie du und diese Lösung hat es behoben.

0 Stimmen

Und wenn Sie sich in einer nginx-Umgebung befinden, fügen Sie den PHP-Wert zu Ihrer Website (site-available) Konfiguration unter der location ~.php Direktive hinzu. fastcgi_param PHP_VALUE " error_reporting=E_ALL;\n display_errors=1;";

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X