650 Stimmen

Wie kann ich nützliche Fehlermeldungen in PHP erhalten?

Oft versuche ich, ein PHP-Skript auszuführen, und erhalte nur einen leeren Bildschirm zurück. Keine Fehlermeldung, nur ein leerer Bildschirm. Die Ursache könnte ein einfacher Syntaxfehler (falsche Klammer, fehlendes Semikolon), ein fehlgeschlagener Funktionsaufruf oder etwas ganz anderes sein.

Es ist sehr schwierig, herauszufinden, was schief gelaufen ist. Am Ende muss ich Code auskommentieren, überall "echo"-Anweisungen eingeben 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 auszugeben, wie es Java tut?

1 Stimmen

5 Stimmen

@JuannStrauss, Das ist noch untertrieben. Und wenn Sie schließlich siehe die Fehler, es heißt T_PAAMAYIM_NEKUDOTAYIM . Oder vielleicht "muss eine Instanz von integer sein, integer gegeben" .

2 Stimmen

58voto

Madara's Ghost Punkte 165354

PHP-Konfiguration

2 Einträge in php.ini diktieren den Ausgang von Fehlern:

  1. display_errors
  2. error_reporting

Unter Produktion , display_errors ist in der Regel eingestellt auf Off (Das ist auch gut so, denn die Anzeige von Fehlern in Produktionsstätten ist im Allgemeinen nicht erwünscht!)

Doch in Entwicklung sollte sie eingestellt werden auf On , damit Fehler angezeigt werden. Siehe !

error_reporting (ab PHP 5.3) ist standardmäßig eingestellt auf E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED (d.h. es wird alles angezeigt, mit Ausnahme von Hinweisen, strengen Normen und Verfallshinweisen). Im Zweifelsfall setzen Sie ihn auf E_ALL zur Anzeige todo die Fehler. Siehe !

Brr, brr! Keine Prüfung! Ich kann meine php.ini nicht ändern!

Das ist eine Schande. Normalerweise erlauben Shared Hosts die Änderung ihrer php.ini-Datei nicht, und so ist diese Option leider nicht verfügbar. Aber keine Angst! Wir haben andere Optionen !

Laufzeitkonfiguration

In dem gewünschten Skript können wir die php.ini-Einträge zur Laufzeit ändern! Das heißt, es wird ausgeführt, wenn das Skript läuft! Klasse!

error_reporting(E_ALL);
ini_set("display_errors", "On");

Diese beiden Zeilen haben den gleichen Effekt wie die Änderung der php.ini-Einträge wie oben! Großartig!

Ich erhalte immer noch eine leere Seite/500 Fehler!

Das bedeutet, dass das Skript noch gar nicht gelaufen war! Das passiert normalerweise, wenn Sie einen Syntaxfehler haben!

Bei Syntaxfehlern kommt das Skript nicht einmal zur Laufzeit. Es scheitert an Kompilierzeit Das bedeutet, dass die Werte in der php.ini verwendet werden, die, wenn Sie sie nicht geändert haben, die Anzeige von Fehlern möglicherweise nicht zulassen.

Fehlerprotokolle

Darüber hinaus protokolliert PHP standardmäßig Fehler. Bei gemeinsam genutztem Hosting kann es sich in einem eigenen Ordner oder im selben Ordner wie das fehlerhafte Skript befinden.

Wenn Sie Zugriff auf die php.ini haben, finden Sie diese unter der error_log Eintrag.

0 Stimmen

Für die Laufzeitkonfiguration können Sie diese Zeilen möglicherweise in eine separate Datei schreiben & include die php-Datei mit dem Fehler.

33voto

FDisk Punkte 7253

Ich verwende diese Syntax immer ganz oben im PHP-Skript.

ini_set('error_reporting', E_ALL);
ini_set('display_errors', 'On');  //On or Off

3 Stimmen

Es tut mir leid, aber -1, dass ich die anderen Antworten, die bereits gepostet wurden, nicht gelesen habe. Wie bereits mehrfach erwähnt, wird dies in der .htaccess erledigt.

12 Stimmen

Das übliche "kostenlose Hosting" ignoriert die .htaccess

30voto

gnarf Punkte 103284

Es gibt eine sehr nützliche Erweiterung namens " xdebug "Das wird auch Ihre Berichte viel schöner machen.

2 Stimmen

In der Tat ist dies eine muy nützliches Debugging-Tool - macht Fehlermeldungen viel ausführlicher, mit vollständigen Stack Traces und Variablen-Dumps und allem.

2 Stimmen

Ja. Und dann verwenden Sie etwas wie das VimDebugger-Plugin, um Ihren Code durchzugehen und herauszufinden, wo es schief läuft.

1 Stimmen

NetBeans mit xdebug hier. Es ist so fantastisch. Ich bin neu in PHP (in der Regel ASP.NET) und hatte vorher echo-Anweisungen ausgegeben.

27voto

Eduardo Oliveira Punkte 616

Es ist möglich, einen Haken zu setzen, um den letzten Fehler oder die letzte Warnung sichtbar zu machen.

function shutdown(){
  var_dump(error_get_last());
}

register_shutdown_function('shutdown');

Das Hinzufügen dieses Codes am Anfang Ihrer index.php wird Ihnen bei der Fehlersuche helfen.

1 Stimmen

Dies ist pures Gold für Leute, die bei Webhosts festsitzen, die keine Fehler anzeigen, aber keinen Log-Zugang erlauben

27voto

hakre Punkte 184133

Für eine schnelle, praktische Fehlersuche schlage ich normalerweise hier auf SO:

error_reporting(~0); ini_set('display_errors', 1);

an den Anfang des Skripts zu setzen, das der Fehlersuche unterliegt. Dies ist nicht perfekt, die perfekte Variante ist, dass Sie dies auch in der php.ini und dass Sie die Fehler in PHP protokollieren, um Syntax- und Startfehler zu erkennen.

Die hier beschriebenen Einstellungen zeigen alle Fehler, Hinweise und Warnungen an, einschließlich der Strict-Fehler, unabhängig von der PHP-Version.

Die nächsten Dinge, die zu beachten sind:

  • Instalar Xdebug und aktivieren Sie Remote-Debugging mit Ihrer IDE.

Siehe auch:

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