warning - visualizzare errori php




Come posso visualizzare gli errori PHP? (16)

Ho controllato il mio file PHP ini e gli errori di visualizzazione sono stati impostati e anche la segnalazione degli errori è E_ALL . Ho riavviato il mio server web Apache.

Ho persino messo queste righe nella parte superiore del mio script, e non ha nemmeno errori di analisi. Ad esempio, dichiaro variabili con un "$" e non chiudo dichiarazioni ";" . Ma tutti i miei script mostrano una pagina vuota su questi errori, ma voglio vedere effettivamente gli errori nel mio output del browser.

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

Cosa resta da fare?


È possibile aggiungere il proprio gestore di errori personalizzato, che può fornire ulteriori informazioni di debug. Inoltre puoi configurarlo per inviarti via email.

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

Alcuni provider di hosting web ti consentono di modificare i parametri PHP nel file .htaccess .

Puoi aggiungere la seguente riga:

php_value display_errors 1

Ho avuto lo stesso problema del tuo e questa soluzione l'ha risolto.


Dato che ora stiamo eseguendo PHP7, le risposte fornite qui non sono più corrette. L'unico ancora OK è quello di Frank Forte, mentre parla di PHP7. Dall'altro lato, invece di cercare di catturare l'errore con un try / catch, puoi usare un trucco: usare include. Qui 3 pezzi di codice:

File: tst1.php

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

L'esecuzione di questo in PHP7 non mostrerà nulla

Ora prova questo:

File: tst2.php

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

File: tst3.php

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

Ora esegui tst2 che imposta la segnalazione degli errori quindi includi tst3. Vedrai:

Errore di sintassi: errore di sintassi, fine del file imprevisto, variabile attesa (T_VARIABLE) o $ {(T_DOLLAR_OPEN_CURLY_BRACES) o {$ (T_CURLY_OPEN) in tst3.php sulla riga 4


Dentro il tuo php.ini :

display_errors = on

Quindi riavvia il tuo server web.


Ecco uno script PHP:

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

Per una spiegazione più dettagliata degli errori PHP, visita l' errore PHP - error_reporting () .


Imposta questo nel tuo index.php

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

Non è possibile rilevare gli errori di analisi quando si abilita l'output degli errori in fase di esecuzione, poiché analizza il file prima di eseguire effettivamente qualsiasi cosa (e dal momento che incontra un errore durante questo, non eseguirà nulla). Dovrai modificare la configurazione attuale del server in modo che display_errors sia attivo e venga utilizzato il livello errorreporting appropriato. Se non hai accesso a php.ini, potresti essere in grado di utilizzare .htaccess o simili, a seconda del server.

Questa domanda potrebbe fornire ulteriori informazioni.


Per visualizzare tutti gli errori devi:

1. Avere queste righe nello script PHP che si sta chiamando dal browser (in genere index.php ):

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

2. (a) Assicurarsi che questo script non abbia errori di sintassi

-o-

2. (b) Imposta display_errors = On nel tuo php.ini

Altrimenti, non può nemmeno eseguire quelle 2 linee!

Puoi verificare gli errori di sintassi nel tuo script eseguendo (sulla riga di comando):

php -l index.php

Se includi lo script da un altro script PHP , visualizzerà gli errori di sintassi nello script incluso . Per esempio:

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

Puoi fare qualcosa come di seguito:

Imposta sotto i parametri nel tuo file indice principale

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

Quindi in base alle tue esigenze puoi scegliere quale vuoi mostrare:

Per tutti gli errori, avvisi e avvisi

    error_reporting(E_ALL); OR error_reporting(-1);

Per tutti gli errori

    error_reporting(E_ERROR);

Per tutti gli avvertimenti

    error_reporting(E_WARNING);

Per tutti gli avvisi

    error_reporting(E_NOTICE);

Per maggiori informazioni controlla here



Questo codice in alto dovrebbe funzionare error_reporting (E_ALL);

Tuttavia prova a modificare il codice sul telefono nel file

error_reporting = on


Questo funziona sempre per me:

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

Tuttavia, questo non fa in modo che PHP mostri errori di analisi: l'unico modo per mostrare quegli errori è modificare il tuo php.ini con questa linea:

display_errors = on

Scrivi e basta:

error_reporting(-1);

Se in qualche modo ti trovi in ​​una situazione in cui non puoi modificare l'impostazione tramite php.ini o .htaccess sei sfortunato per la visualizzazione di errori quando gli script PHP contengono errori di analisi. Dovresti quindi risolvere il problema con i file sulla riga di comando in questo modo:

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

Se il tuo host è così bloccato che non consente di modificare il valore tramite php.ini o .htaccess , potrebbe anche non consentire la modifica del valore tramite ini_set . Puoi verificarlo con il seguente script PHP:

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

Uso:

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

Questo è il modo migliore per scriverlo, ma un errore di sintassi genera un output vuoto, quindi usa la console per verificare gli errori di sintassi. Il modo migliore per eseguire il debug del codice PHP è utilizzare la console; eseguire quanto segue:

php -l phpfilename.php

se hai installato xdebug puoi sovrascrivere ogni impostazione impostando:

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

force_display_errors

Digitare: int, Valore predefinito: 0, introdotto in Xdebug> = 2.3 Se questa impostazione è impostata su 1, verranno sempre visualizzati gli errori, indipendentemente dall'impostazione di display_errors di PHP.

force_error_reporting

Tipo: int, Valore predefinito: 0, Introdotto in Xdebug> = 2.3 Questa impostazione è una maschera di bit, come error_reporting. Questa maschera di bit sarà logicamente OR con la maschera di bit rappresentata da error_reporting per determinare quali errori devono essere visualizzati. Questa impostazione può essere effettuata solo in php.ini e ti consente di forzare la visualizzazione di determinati errori indipendentemente da cosa un'applicazione faccia con ini_set ().





error-reporting