unterdrücken - php.ini error reporting




Wie bekomme ich PHP-Fehler angezeigt? (16)

Benutzen:

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

Dies ist der beste Weg, um es zu schreiben, aber ein Syntaxfehler gibt eine leere Ausgabe. Verwenden Sie die Konsole also, um nach Syntaxfehlern zu suchen. Der beste Weg, um PHP-Code zu debuggen, ist die Verwendung der Konsole; führe folgendes aus:

php -l phpfilename.php

Ich habe meine PHP ini Datei überprüft und Anzeigefehler gesetzt ist und auch Fehler melden ist E_ALL . Ich habe meinen Apache-Webserver neu gestartet.

Ich habe diese Zeilen sogar an die Spitze meines Skripts gesetzt, und es werden nicht einmal einfache Syntaxfehler gefunden. Zum Beispiel deklariere ich Variablen mit einem "$" und schließe keine Anweisungen ";" . Aber alle meine Skripte zeigen eine leere Seite zu diesen Fehlern, aber ich möchte die Fehler in meiner Browser-Ausgabe sehen.

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

Was bleibt zu tun?


Da wir PHP7 jetzt ausführen, sind die hier gegebenen Antworten nicht mehr korrekt. Der einzige noch in Ordnung ist der von Frank Forte, da er über PHP7 spricht. Auf der anderen Seite, anstatt zu versuchen, Fehler mit einem try / catch zu fangen, können Sie einen Trick verwenden: use include. Hier 3 Stück Code:

Datei: tst1.php

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
// Missing " and ;
echo "Testing
?>  

Das Ausführen in PHP7 zeigt nichts

Versuchen Sie Folgendes:

Datei: tst2.php

<?php
error_reporting(E_ALL);
ini_set('display_errors','On');
include ("tst3.php");
?> 

Datei: tst3.php

<?php
// Missing " and ;
echo "Testing
?>  

Führen Sie jetzt tst2 aus, das die Fehlerberichterstattung einstellt, und schließen Sie dann tst3 ein. Du wirst sehen:

Parse-Fehler: Syntaxfehler, unerwartetes Ende der Datei, erwartete Variable (T_VARIABLE) oder $ {(T_DOLLAR_OPEN_CURLY_BRACES) oder {$ (T_CURLY_OPEN) in tst3.php in Zeile 4


Das habe ich gelernt. In der Datei PHP.INI

error_reporting = E_ALL
display_errors = On

Das wird funktionieren:

<?php
     error_reporting(E_ALL);
     ini_set('display_errors', 1);    
?>

Dieser Code oben sollte funktionieren error_reporting (E_ALL);

Versuchen Sie jedoch, den Code am Telefon in der Datei zu bearbeiten

error_reporting = ein


Einfach schreiben:

error_reporting(-1);

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

In php.ini fügen Sie den folgenden Code hinzu (Ich gebe einen einfachen Fehler, der den Code zeigt):

display_errors = on

display_startup_errors = on

Hier ist ein PHP-Skript:

<?php
    ini_set("display_startup_errors", 1);
    ini_set("display_errors", 1);

    /* Reports for either E_ERROR | E_WARNING | E_NOTICE  | Any Error*/
    error_reporting(E_ALL);

    echo(abc); /* Notice: abc is an undefined constant */
?>

Für eine detailliertere Erklärung von PHP-Fehlern besuchen Sie PHP Error - error_reporting () .


In deiner php.ini :

display_errors = on

Dann starte deinen Webserver neu.


Setze dies in deiner index.php

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

Sie können einen eigenen benutzerdefinierten Fehlerhandler hinzufügen, der zusätzliche Debug-Informationen bereitstellen kann. Außerdem können Sie es einrichten, um Sie per E-Mail zu senden.

function ERR_HANDLER($errno ,$errstr, $errfile, $errline){
    $msg="<b>Someting bad happened.</b> [$errno] $errstr <br><br>
    <b>File:</b> $errfile <br>
    <b>Line:</b> $errline <br>
    <pre>".json_encode(debug_backtrace(), JSON_PRETTY_PRINT)."</pre> <br>";

    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");

Sie können keine Parse-Fehler abfangen, wenn die Fehlerausgabe zur Laufzeit aktiviert wird, da die Datei vor der eigentlichen Ausführung der Datei analysiert wird (und da sie dabei einen Fehler feststellt, wird nichts ausgeführt). Sie müssen die tatsächliche Serverkonfiguration ändern, damit display_errors aktiviert ist und die entsprechende error_reporting-Ebene verwendet wird. Wenn Sie keinen Zugriff auf die php.ini haben, können Sie abhängig vom Server möglicherweise .htaccess oder ähnliches verwenden.

Diese Frage kann zusätzliche Informationen liefern.


Um alle Fehler anzuzeigen, müssen Sie:

1. Lassen Sie diese Zeilen im PHP-Skript, das Sie aufrufen, vom Browser (typischerweise index.php ):

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

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

-oder-

2. (b) Setze display_errors = On in deiner php.ini

Sonst kann es nicht einmal diese 2 Zeilen laufen!

Sie können in Ihrem Skript nach Syntaxfehlern suchen, indem Sie (in der Befehlszeile) Folgendes ausführen:

php -l index.php

Wenn Sie das Skript aus einem anderen PHP-Skript einfügen, werden Syntaxfehler im enthaltenen Skript angezeigt. Beispielsweise:

index.php

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

// Any syntax errors here will result in a blank screen in the browser

include 'my_script.php';

my_script.php

adjfkj // This syntax error will be displayed in the browser


Wenn Sie trotz aller obigen Antworten (oder Sie können Ihre php.ini-Datei nicht bearbeiten) immer noch keine Fehlermeldung erhalten, versuchen Sie eine neue PHP-Datei zu erstellen, die Fehlerberichte ermöglicht und dann die Problemdatei einfügt. z.B:

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

Obwohl alles in meiner php.ini Datei richtig eingestellt war, konnte ich nur dadurch einen Namespace-Fehler php.ini . Mein genaues Szenario war:

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

//file2.php
namespace c\d;
use c\d\x; //Dies because it's not sure which 'x' class to use
class x {
    ...
}

Wenn Sie xdebug installiert haben, können Sie jede Einstellung überschreiben, indem Sie Folgendes festlegen:

xdebug.force_display_errors = 1;
xdebug.force_error_reporting = -1;

force_display_errors

Typ: int, Standardwert: 0, Eingeführt in Xdebug> = 2.3 Wenn diese Einstellung auf 1 gesetzt ist, werden immer Fehler angezeigt, unabhängig von der Einstellung von PHP's display_errors.

force_error_reporting

Typ: int, Standardwert: 0, Eingeführt in Xdebug> = 2.3 Diese Einstellung ist eine Bitmaske wie error_reporting. Diese Bitmaske wird logisch ODER-verknüpft mit der Bitmaske, die durch Fehlerreport dargestellt wird, um anzuzeigen, welche Fehler angezeigt werden sollen. Diese Einstellung kann nur in der php.ini vorgenommen werden und ermöglicht es Ihnen, bestimmte Fehler zu erzwingen, unabhängig davon, was eine Anwendung mit ini_set () ausführt.





error-reporting