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

46voto

Frank Forte Punkte 1767

Warnung: Die untenstehende Antwort ist faktisch inkorrekt. Es wurde nichts in der Fehlerbehandlung geändert, unbehandelte Ausnahmen werden genauso wie andere Fehler angezeigt. Der vorgeschlagene Ansatz sollte mit Vorsicht verwendet werden, da er Fehler bedingungslos ausgibt, unabhängig von den Einstellungen für die Fehleranzeige und eine potenzielle Bedrohung darstellen kann, indem sensible Informationen auf einer Live-Site offenbart werden.

Es könnte sein, dass alle Einstellungen für "Fehlerberichterstattung" oder "Fehler anzeigen" in PHP 7 nicht zu funktionieren scheinen. Das liegt daran, dass sich die Fehlerbehandlung geändert hat. Versuchen Sie stattdessen dies:

try{
     // Ihr Code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' Zeile '.$e->getLine().' aufgerufen von '.$trace[0]['file'].' Zeile '.$trace[0]['line'];
}

Oder einfangen von Ausnahmen und Fehlern in einem Schritt (dies ist nicht abwärtskompatibel mit PHP 5):

try{
     // Ihr Code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' Zeile '.$e->getLine().' aufgerufen von '.$trace[0]['file'].' Zeile '.$trace[0]['line'];
}

1 Stimmen

Meinst du PHP7 oder PHP7.1? Ich bin verwirrt, ich habe es versucht, wie es die validierte Antwort vorgeschlagen hat, und es funktioniert. Ich glaube, du schlägst etwas etwas anderes vor meiner bescheidenen Meinung nach, tatsächlich "keine Abwärtskompatibilität" und wenn du einen vollständigen PHP < 7 Code ändern musst und überall in deinem bereits definierten PHP-Code try{} catch() {} hinzufügen musst, will ich gar nicht daran denken, was für ein Durcheinander das geben wird..

0 Stimmen

@FancyJohn, das könnte helfen: $bt = debug_backtrace(); print_r($bt);.

0 Stimmen

@ballangddang, Ich bin auf das Problem mit PHP 7.0 gestoßen, bei dem der einzige Weg, den Fehler anzuzeigen, darin bestand, die try/catch-Blöcke zu verwenden und speziell Error zu fangen. Wenn Sie alle Anfragen (außer vielleicht JavaScript, CSS, Bilder usw.) zur index.php-Datei umschreiben und dort den try-catch-Block haben, wird es einfacher. Ja, jedes System, das keinen einzigen Einstiegspunkt hat, wäre eine große Kopfschmerzen beim Aktualisieren.

35voto

Abhijit Jagtap Punkte 2585

Verwendung:

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

Dies ist die beste Methode, um es zu schreiben, aber ein Syntaxfehler führt zu einer leeren Ausgabe, daher verwenden Sie die Konsole, um nach Syntaxfehlern zu suchen. Der beste Weg, PHP-Code zu debuggen, ist die Verwendung der Konsole; führen Sie Folgendes aus:

php -l phpdateiname.php

35voto

Mahendra Jella Punkte 4990

Dies wird funktionieren:

0 Stimmen

Oktober 2020: Das hat bei mir funktioniert. So einfach. Kein Herumspielen mit .htaccess oder php.ini. Wenn Sie fertig sind, kommentieren Sie es einfach aus oder entfernen Sie es. PHP 7.4

23voto

Sumit Gupta Punkte 559

Setzen Sie dies in Ihrer index.php Datei:

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

20voto

NavyaKumar Punkte 569

Erstellen Sie eine Datei namens php.ini im Ordner, in dem sich Ihre PHP-Datei befindet.

Fügen Sie in php.ini den folgenden Code hinzu (Ich gebe einen einfachen Fehlercode zur Anzeige):

display_errors = on

display_startup_errors = on

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