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

12voto

webcoder.co.uk Punkte 111

Akzeptierte Antwort inklusive zusätzlicher Optionen. In PHP-Dateien für meinen ENTWICKLUNG apache vhost (.htaccess, wenn Sie sicherstellen können, dass es nicht in die Produktion gelangt):

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

Das macht PHP jedoch nicht dazu, Parsefehler anzuzeigen - der einzige Weg, um diese Fehler anzuzeigen, besteht darin, Ihre php.ini mit dieser Zeile zu ändern:

display_errors = on

(Wenn Sie keinen Zugriff auf php.ini haben, kann es auch funktionieren, diese Zeile in .htaccess einzufügen):

// Ich habe einige zusätzliche Optionen hinzugefügt, die E_ALL gemäß https://www.php.net/manual/en/errorfunc.configuration.php setzen.
php_flag log_errors on
php_flag display_errors on
php_flag display_startup_errors on
php_value error_reporting 2147483647
php_value error_log /var/www/mywebsite.ext/logs/php.error.log

12voto

lintabá Punkte 711

Sie können Ihren eigenen benutzerdefinierten Fehlerhandler hinzufügen, der zusätzliche Debug-Informationen bereitstellen kann. Darüber hinaus können Sie es so einrichten, dass es Ihnen die Informationen per E-Mail sendet.

function ERR_HANDLER($errno, $errstr, $errfile, $errline){
    $msg = "Etwas Schlimmes ist passiert. [$errno] $errstr 
    Datei: $errfile 
    Zeile: $errline 
    ".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)." ";

    echo $msg;

    return false;
}

function EXC_HANDLER($exception){
    ERR_HANDLER(0, $exception->getMessage(), $exception->getFile(), $exception->getLine());
}

function shutDownFunction() {
    $error = error_get_last();
    if ($error["type"] == 1) {
        ERR_HANDLER($error["type"], $error["message"], $error["file"], $error["line"]);
    }
}

set_error_handler ("ERR_HANDLER", E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED);
register_shutdown_function("shutDownFunction");
set_exception_handler("EXC_HANDLER");

7voto

Joel Wembo Punkte 759

Dieser Code oben sollte funktionieren:

error_reporting(E_ALL);

Versuchen Sie jedoch, den Code auf dem Handy in der Datei zu bearbeiten:

error_reporting =on

5voto

Xakiru Punkte 2121

Die beste/einfachste/schnellste Lösung, die Sie verwenden können, wenn Sie schnell debuggen möchten, besteht darin, Ihren Code mit der Abfangen von Ausnahmen zu umgeben. Das mache ich, wenn ich schnell etwas in der Produktion überprüfen möchte.

try {
    // Seitencode
}
catch (Exception $e) {
    echo 'Ausnahme abgefangen: ',  $e->getMessage(), "\n";
}

0 Stimmen

Für php7 ist catch (Throwable $e) besser... Oder ein weiterer catch-Block unter catch(Error $e)

0 Stimmen

Dieser Code ist tatsächlich gefährlich. UNTER KEINEN UMSTÄNDEN sollte er in der Produktionsumgebung verwendet werden. Da er die Fehlermeldung an jeden weitergibt, nicht nur an den Entwickler, der sie hinzugefügt hat. In der Produktionsumgebung müssen alle Fehler protokolliert werden. So kann der Entwickler jederzeit einen Blick in das Fehlerprotokoll werfen. Und es wird alle Fehler erfassen, nicht nur die, die aufgetreten sind, als der Entwickler den Browser aktualisiert hat. Ohne dass zusätzlicher Code hinzugefügt werden muss. Was diesen Code nicht nur gefährlich, sondern auch nutzlos macht.

0 Stimmen

Kumpel, er ist schnell beim Debugging, nicht beim Starten einer Website zur Fehlererkennung, da das gefährlich ist, niemand würde es bevorzugen, Fehler den Kunden anstelle einer leeren Seite anzuzeigen. Und ja, wir könnten ihm einen Logger schreiben oder überprüfen, was er verwendet, um ihm die richtige Lösung bereitzustellen, aber das ist stackoverflow, es würde viel Chat und Interaktionen erfordern, um seine spezifischen Bedürfnisse zu kennen. dein gesunder Menschenverstand.

4voto

pardeep Punkte 321

Während Ihre Website live ist, sollte die php.ini Datei display_errors aus Sicherheitsgründen deaktiviert haben. Für die Entwicklungsumgebung kann display_errors jedoch zur Fehlerbehebung aktiviert werden.

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