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

20voto

Peter Punkte 1049

Um einen Syntaxfehler anzuzeigen, anstatt display_errors in der php.ini-Datei zu setzen, können Sie einen Trick verwenden: verwenden Sie include.

Hier sind drei Code-Stücke:

Datei: tst1.php



Wenn Sie diese Datei direkt ausführen, wird nichts angezeigt, da `display_errors` in der php.ini-Datei auf 0 gesetzt ist.

Versuchen Sie es jetzt damit:

Datei: tst2.php

``

Datei: tst3.php

`

Führen Sie nun tst2.php aus, das die Fehlerausgabe einstellt, und schließen Sie dann tst3 ein. Sie werden sehen:

> Syntaxfehler: unerwartetes Dateiende, erwartete Variable (T_VARIABLE) oder ${ (T_DOLLAR_OPEN_CURLY_BRACES) oder {$ (T_CURLY_OPEN) in tst3.php in Zeile 4

` `` ```

1 Stimmen

Ich habe einige Zeit damit verbracht, das herauszufinden. Warum haben sie das Verhalten von PHP 5 geändert?

1 Stimmen

Dies verdient mehr Upvotes. Der Schlüssel in meinem Fall war es, die Fehlerberichterstattung zu aktivieren und in init0.php einen Fehlerbehandler zu definieren und von dieser Datei aus init1.php zu inkludieren, das weitere Dateien mit Fehlern einschließen kann. Es funktioniert nicht, wenn die Fehlerberichterstattung in derselben Datei aktiviert wird, die andere Dateien mit Fehlern einschließt.

1 Stimmen

Der vorgeschlagene Ansatz ist tatsächlich korrekt, aber die Erklärung war falsch. In PHP7 hat sich nichts geändert. Weder PHP5 noch PHP3 konnten eine Datei mit einem Syntaxfehler parsen. Das Problem ist ein Parsefehler, nicht eine PHP-Version. Und die vorgeschlagene Lösung ist gut für jede PHP-Version.

17voto

Channaveer Hakari Punkte 2602

Normalerweise würde ich den folgenden Code in meinen einfachen PHP-Projekten verwenden.

if(!defined('UMGEBUNG')){
    define('UMGEBUNG', 'ENTWICKLUNG');
}

$base_url = null;

if (defined('UMGEBUNG'))
{
    switch (UMGEBUNG)
    {
        case 'ENTWICKLUNG':
            $base_url = 'http://localhost/produkt/';
            ini_set('display_errors', 1);
            ini_set('display_startup_errors', 1);
            error_reporting(E_ALL);
            break;

        case 'PRODUKTION':
            $base_url = 'Produktions-URL'; /* https://google.com */
            error_reporting(E_ALL);
            ini_set('display_errors',  0);
            ini_set('display_startup_errors',  0);
            ini_set('log_errors', 1); // Mechanismus zum Protokollieren von Fehlern
            break;

        default:
            exit('Die Anwendungsumgebung ist nicht korrekt festgelegt.');
    }
}

16voto

jxmallett Punkte 3947

Wenn Sie trotz Befolgens aller obigen Antworten (oder wenn Sie Ihre php.ini-Datei nicht bearbeiten können) immer noch keine Fehlermeldung erhalten können, versuchen Sie, eine neue PHP-Datei zu erstellen, die die Fehlerausgabe aktiviert, und fügen Sie dann die Problemdatei ein. z.B.:

error_reporting(E_ALL);
ini_set('display_errors', 1);
require_once('problem_file.php');

Auch wenn alles richtig in meiner php.ini-Datei eingestellt war, war dies die einzige Möglichkeit, wie ich einen Namensraumfehler erkennen konnte. Mein genauer Fall war:

//file1.php
namespace a\b;
class x {
    ...
}

//file2.php
namespace c\d;
use c\d\x; //Schlägt fehl, da nicht klar ist, welche 'x'-Klasse verwendet werden soll
class x {
    ...
}

1 Stimmen

Nein, die Fehlerberichterstattung ist kein Log-Level, sondern ein Bitfeld. Die Verwendung von 999999 ist eine sehr schlechte Idee, verwenden Sie lieber eine Zweierpotenz minus 1, zum Beispiel 2047!

0 Stimmen

Du hast völlig recht, @peterh! Ich habe es auf E_ALL geändert, da dies die Meldung aller Fehler ermöglicht (außer strikte Fehler in PHP 5.4 und darunter).

14voto

chiborg Punkte 25033

Wenn Sie sich irgendwie in einer Situation befinden, in der Sie die Einstellung nicht über php.ini oder .htaccess ändern können, haben Sie Pech, wenn Fehler angezeigt werden sollen, wenn Ihre PHP-Skripte Syntaxfehler enthalten. Dann müssten Sie die Dateien auf der Befehlszeile wie folgt überprüfen: So überprüfen Sie mehrere Dateien gleichzeitig mit dem Linter

find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "Keine Syntaxfehler vorhanden"

Wenn Ihr Host so stark eingeschränkt ist, dass er das Ändern des Werts über php.ini oder .htaccess nicht erlaubt, kann er auch das Ändern des Werts über ini_set verbieten. Das können Sie mit dem folgenden PHP-Skript überprüfen:

0 Stimmen

find . -name '*.php' -type f -exec php -l {} \; | grep -v 'Keine Syntaxfehler gefunden' ist einfacher

14voto

Binit Ghetiya Punkte 1779

Sie können etwas Ähnliches wie unten tun:

Legen Sie die folgenden Parameter in Ihrer Hauptindexdatei fest:

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

Dann können Sie je nach Bedarf wählen, was Sie anzeigen möchten:

Für alle Fehler, Warnungen und Hinweise:

    error_reporting(E_ALL); ODER error_reporting(-1);

Für alle Fehler:

    error_reporting(E_ERROR);

Für alle Warnungen:

    error_reporting(E_WARNING);

Für alle Hinweise:

    error_reporting(E_NOTICE);

Weitere Informationen finden Sie unter hier.

0 Stimmen

Was ist die "Hauptindexdatei"? Datei index.html?

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