it-swarm.com.de

Wie kann ich PHP Fehler anzeigen lassen?

Ich habe meine PHP Init-Datei (php.ini) überprüft und Anzeigefehler sind eingestellt. Außerdem ist die Fehlermeldung E_ALL. Ich habe meinen Apache-Webserver neu gestartet.

Ich habe diese Zeilen sogar ganz oben in mein Skript eingefügt, und es werden nicht einmal einfache Analysefehler erfasst. Zum Beispiel deklariere ich Variablen mit einem "$" und schließe Anweisungen";" nicht. Aber alle meine Skripte zeigen eine leere Seite über diese Fehler, aber ich möchte tatsächlich die Fehler in meiner Browser-Ausgabe sehen.

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

Was bleibt noch zu tun?

1598
Abs

Das funktioniert bei mir immer:

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

Dies führt jedoch nicht dazu, dass PHP Analysefehler anzeigt. Die einzige Möglichkeit, diese Fehler anzuzeigen, besteht darin, Ihre php.ini mit der folgenden Zeile zu ändern:

display_errors = on
3025
Fancy John

Sie können keine Analysefehler abfangen, wenn Sie die Fehlerausgabe zur Laufzeit aktivieren, da die Datei analysiert wird, bevor tatsächlich etwas ausgeführt wird (und da dabei ein Fehler auftritt, wird nichts ausgeführt). Sie müssen die tatsächliche Serverkonfiguration so ändern, dass display_errors aktiviert ist und die entsprechende error_reporting-Ebene verwendet wird. Wenn Sie keinen Zugriff auf php.ini haben, können Sie je nach Server möglicherweise .htaccess oder ähnliches verwenden.

Diese Frage kann zusätzliche Informationen liefern.

150
Michael Madsen

In Ihrer php.ini:

display_errors = on

Starten Sie dann Ihren Webserver neu.

135
user1803477

Um alle Fehler anzuzeigen, müssen Sie:

1. Enthalten die folgenden Zeilen im Skript PHP, das Sie vom Browser aus aufrufen (normalerweise _index.php_):

_error_reporting(E_ALL);
ini_set('display_errors', '1');
_

2. (a) Stellen Sie sicher, dass dieses Skript keine Syntaxfehler enthält

- oder -

2. (b) Setze _display_errors = On_ in deinem _php.ini_

Andernfalls können diese beiden Zeilen nicht ausgeführt werden!

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

_php -l index.php
_

Wenn Sie das Skript aus einem anderen PHP Skript einfügen , wird es Syntaxfehler im enthaltenen Skript anzeigen. Zum Beispiel:

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
_
93
andre

Bei einigen Webhosting-Anbietern können Sie PHP Parameter in der Datei .htaccess ändern.

Sie können die folgende Zeile hinzufügen:

php_value display_errors 1

Ich hatte das gleiche Problem wie Sie und diese Lösung hat es behoben.

47
Kalhua

Möglicherweise funktionieren alle Einstellungen für "Fehlerberichterstattung" oder "Anzeigefehler" in PHP 7 nicht. Dies liegt daran, dass sich die Fehlerbehandlung geändert hat. Versuchen Sie dies stattdessen:

try{
     // Your code
} 
catch(Error $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}

Oder, um Ausnahmen und Fehler auf einmal abzufangen (dies ist nicht abwärtskompatibel mit PHP 5):

try{
     // Your code
} 
catch(Throwable $e) {
    $trace = $e->getTrace();
    echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine().' called from '.$trace[0]['file'].' on line '.$trace[0]['line'];
}
36
Frank Forte

Verwenden:

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

Dies ist der beste Weg, es zu schreiben, aber ein Syntaxfehler gibt eine leere Ausgabe aus. Verwenden Sie die Konsole, um nach Syntaxfehlern zu suchen. Die beste Methode zum Debuggen von PHP -Code ist die Verwendung der Konsole. Führen Sie Folgendes aus:

php -l phpfilename.php
31
Abhijit Jagtap

Das wird funktionieren:

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

Stellen Sie dies in Ihrer index.php Datei ein:

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
20
Sumit Gupta

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

Fügen Sie in der php.ini den folgenden Code hinzu (ich gebe einen einfachen Fehler beim Anzeigen des Codes):

display_errors = on

display_startup_errors = on
18
NavyaKumar

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 */
?>

Eine detailliertere Erklärung von PHP Fehlern finden Sie unter PHP Error - error_reporting ().

16

Wenn Sie trotz Befolgung aller oben genannten Antworten (oder wenn Sie Ihre php.ini-Datei nicht bearbeiten können) immer noch keine Fehlermeldung erhalten, erstellen Sie eine neue PHP -Datei, die die Fehlerberichterstattung und aktiviert Fügen Sie dann die Problemdatei hinzu. z.B:

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

Obwohl in meiner php.ini -Datei alles richtig eingestellt war, konnte ich nur so einen Namespace-Fehler feststellen. 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 {
    ...
}
14
jxmallett

Wenn Sie PHP als Apache-Modul verwenden, können Sie die Konfigurationseinstellungen mithilfe von Anweisungen in Apache-Konfigurationsdateien (z. B. httpd.conf) und .htaccess-Dateien ändern. Dazu benötigen Sie die Berechtigungen "AllowOverride Options" oder "AllowOverride All".

Überprüfen Sie dies

http://funbird.co.uk/blog/tech-articals/linux-tech-articals/enabling-error-display-php-via-htaccess

13
mike

Wenn Sie sich in einer Situation befinden, in der Sie die Einstellung nicht über php.ini oder .htaccess ändern können, haben Sie kein Glück, Fehler anzuzeigen, wenn Ihre PHP Skripte Analysefehler enthalten . Sie müssten sich dann dazu entschließen, die Dateien in der Befehlszeile zu fusseln wie folgt:

find . -name '*.php' -type f -print0 | xargs -0 -n1 -P8 php -l | grep -v "No syntax errors"

Wenn Ihr Host so gesperrt ist, dass es nicht möglich ist, den Wert über php.ini oder .htaccess zu ändern, ist es möglicherweise auch nicht zulässig, den Wert über ini_set zu ändern. Sie können dies mit dem folgenden PHP Skript überprüfen:

<?php
if( !ini_set( 'display_errors', 1 ) ) {
  echo "display_errors cannot be set.";
} else {
  echo "changing display_errors via script is possible.";
}
12
chiborg

Da wir jetzt PHP 7 ausführen, sind die hier gegebenen Antworten nicht mehr korrekt. Der einzige, der noch in Ordnung ist, ist der von Frank Forte , da er über PHP 7 spricht.

Auf der anderen Seite können Sie einen Trick anwenden, anstatt Fehler mit try/catch zu fangen: use include.

Hier drei Code-Teile:

Datei: tst1.php

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

Wenn Sie dies in PHP 7 ausführen, wird nichts angezeigt.

Versuchen Sie jetzt 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 nun tst2 aus, wodurch die Fehlerberichterstattung festgelegt wird, und schließen Sie dann tst3 ein. Du wirst sehen:

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

12
Peter

Normalerweise würde ich in meinem einfachen PHP -Projekt den folgenden Code verwenden, der sehr klein ist. Wenn das Projekt groß wird, empfehle ich:

if(!defined('ENVIRONMENT')){
    define('ENVIRONMENT', 'DEVELOPMENT');
}

$base_url = null;

if (defined('ENVIRONMENT'))
{
    switch (ENVIRONMENT)
    {
        case 'DEVELOPMENT':
            $base_url = 'http://localhost/product/';
            ini_set('display_errors', 1);
            ini_set('display_startup_errors', 1);
            error_reporting(E_ALL|E_STRICT);
            break;

        case 'PRODUCTION':
            $base_url = 'Production URL'; /* https://google.com */
            error_reporting(0);
            /* Mechanism to log errors */
            break;

        default:
            exit('The application environment is not set correctly.');
    }
}
12

Sie können wie folgt vorgehen:

Stellen Sie die folgenden Parameter in Ihrer Hauptindexdatei ein:

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

Dann können Sie basierend auf Ihren Anforderungen auswählen, welche Sie anzeigen möchten:

Für alle Fehler, Warnungen und Hinweise:

    error_reporting(E_ALL); OR 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 .

11
Binit Ghetiya

Sie können Ihren eigenen benutzerdefinierten Fehlerbehandler hinzufügen, der zusätzliche Debuginformationen bereitstellen kann. Darüber hinaus können Sie festlegen, dass Sie die Informationen per E-Mail erhalten.

function ERR_HANDLER($errno, $errstr, $errfile, $errline){
    $msg = "<b>Something 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");
10
lintabá

Dieser Code oben sollte funktionieren:

error_reporting(E_ALL);

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

error_reporting =on
6
Wembo Mulumba

Die beste/einfache/schnelle Lösung, die Sie für ein schnelles Debuggen verwenden können, besteht darin, Ihren Code mit abfangenden Ausnahmen zu umgeben. Das mache ich, wenn ich etwas in der Produktion schnell überprüfen will.

try {
    // Page code
}
catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\n";
}
6
Xakiru

Einfach schreiben:

error_reporting(-1);
4
jewelhuq

Das habe ich gelernt. In der PHP.INI-Datei

error_reporting = E_ALL
display_errors = On
4
Salam
    <?php
    // Turn off error reporting
    error_reporting(0);

    // Report runtime errors
    error_reporting(E_ERROR | E_WARNING | E_PARSE);

    // Report all errors
    error_reporting(E_ALL);

    // Same as error_reporting(E_ALL);
    ini_set("error_reporting", E_ALL);

    // Report all errors except E_NOTICE
    error_reporting(E_ALL & ~E_NOTICE);
    ?>

Während Ihre Site aktiv ist, sollten in der Datei php.ini aus Sicherheitsgründen die Anzeigefehler deaktiviert sein. Für die Entwicklungsumgebung können jedoch display_errors zur Fehlerbehebung aktiviert werden.

4
pardeep

Wenn Sie Xdebug installiert haben, können Sie jede Einstellung durch folgende Einstellungen überschreiben:

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 der display_errors in PHP.

force_error_reporting

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

3
Peter Haberkorn

Möglicherweise möchten Sie diesen Code verwenden:

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

Sie können dies tun, indem Sie die Datei php.ini ändern und Folgendes hinzufügen

display_errors = on
display_startup_errors = on

ODER Sie können auch den folgenden Code verwenden, da dies bei mir immer funktioniert

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

Abgesehen von den Funktionen php.ini und ini_set () im PHP-Skript können Sie dasselbe mit den unten gezeigten Anweisungen .htaccess und httpd.conf tun. Einige Hosting-Anbieter erlauben das Einstellen von PHP-Einstellungen über .htaccess und httpd.conf.

#hide PHP-Fehler

php_flag display_startup_errors ON

php_flag display_errors ON

php_flag html_errors ON

php_flag log_errors on

php_flag ignore_repeated_errors off

php_flag ignore_repeated_source off

php_flag report_memleaks on

php_flag track_errors on

php_value docref_root 0

php_value docref_ext 0

php_value error_log /home/path/public_html/domain/PHP_errors.log

php_value error_reporting 999999999

php_value error_reporting -1

php_value log_errors_max_len 0

Ordnung erlauben, ablehnen

Abgelehnt von allen

Alle erfüllen

0
mohitesachin217