Using
<?php ini_set('display_errors', 1); ?>
at the top of your script will not catch any parse errors. A missing ")" or ";" will still lead to a blank page.
This is because the entire script is parsed before any of it is executed. If you are unable to change php.ini and set
display_errors On
then there is a possible solution suggested under error_reporting:
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include("file_with_errors.php");
?>
[Modified by moderator]
You should also consider setting error_reporting = -1 in your php.ini and display_errors = On if you are in development mode to see all fatal/parse errors or set error_log to your desired file to log errors instead of display_errors in production (this requires log_errors to be turned on).
Configurazione di Runtime
Il comportamento di queste funzioni è influenzato dalle impostazioni di php.ini.
| Nome | Default | Modificabile | Storico dei cambiamenti |
|---|---|---|---|
| error_reporting | NULL | PHP_INI_ALL | |
| display_errors | "1" | PHP_INI_ALL | |
| display_startup_errors | "0" | PHP_INI_ALL | |
| log_errors | "0" | PHP_INI_ALL | |
| log_errors_max_len | "1024" | PHP_INI_ALL | Disponibile da PHP 4.3.0. |
| ignore_repeated_errors | "0" | PHP_INI_ALL | Disponibile da PHP 4.3.0. |
| ignore_repeated_source | "0" | PHP_INI_ALL | Disponibile da PHP 4.3.0. |
| report_memleaks | "1" | PHP_INI_ALL | Disponibile da PHP 4.3.0. |
| track_errors | "0" | PHP_INI_ALL | |
| html_errors | "1" | PHP_INI_ALL | PHP_INI_SYSTEM in PHP <= 4.2.3. |
| xmlrpc_errors | "0" | PHP_INI_SYSTEM | Available since PHP 4.1.0. |
| xmlrpc_error_number | "0" | PHP_INI_ALL | Disponibile da PHP 4.1.0. |
| docref_root | "" | PHP_INI_ALL | Disponibile da PHP 4.3.0. |
| docref_ext | "" | PHP_INI_ALL | disponibile da PHP 4.3.2. |
| error_prepend_string | NULL | PHP_INI_ALL | |
| error_append_string | NULL | PHP_INI_ALL | |
| error_log | NULL | PHP_INI_ALL |
Breve descrizione dei parametri di configurazione.
-
error_reportinginteger -
Imposta il livello di errore da visualizzare. Il parametro è sia un intero rappresentante un campo di bit, o una costante nominale. I livelli ri report degli errori e le costanti previste sono descritte in Costanti Predefinite, e in php.ini. Per impostare il livello in fase di esecuzione utilizzare la funzione error_reporting(). Vedere anche il parametro display_errors.
In PHP 4 e PHP 5 il valore di default è
E_ALL&~E_NOTICE. Questa impostazione non visualizza gli errori di livelloE_NOTICE. Tuttavia può essere comodo visualizzare questi messaggi in fase di sviluppo.Nota:
Abilitare
E_NOTICEdurante la fase di sviluppo ha dei benefici. Ad esempio per scopi di debug: i messaggi di tipo NOTICE avvisano su possibili bug nel codice. L'uso di variabili non assegnate, ad esempio, viene rilevato con questo livello di errore. Particolare che è molto utile per trovare errori di battitura e risparmiare tempo in fase di debug. I messaggi di tipo NOTICE segnalano il codice scritto con un cattivo stile. Ad esempio, $arr[item] è meglio che sia scritto come $arr['item'] poiché il PHP tenta di trattare "item" come costante. Se non esiste una simile costante, il PHP presume che si tratti dell'indice di una matrice.Nota:
Nel PHP 5 è stato introdotto un nuovo livello di errore
E_STRICT. Prima di PHP 5.4.0E_STRICTnon era incluso all'interno diE_ALL, così si doveva attivare in modo esplicito questo tipo di livello d'errore in PHP < 5.4.0. AbilitareE_STRICTdurante lo sviluppo ha alcuni vantaggi. I messaggi STRICT forniscono suggerimenti che possono aiutare a garantire la migliore interoperabilità e la compabilità in avanti del codice. Questi messaggi possono includere cose come la chiamata di metodi non statici in modo statico, la definizione di proprietà in una definizione di classe compatibile mentre sono definite in un trait utilizzato, e prima di PHP 5.3 alcune funzioni obsolete emettono erroriE_STRICTcome ad esempio l'assegnamento di oggetti con riferimento alla creazione di un'istanza.Nota: Costanti PHP fuori da PHP
L'utilizzo di constanti PHP fuori da PHP, come ad esempio in httpd.conf, non ha senso tranne nei casi in cui siano richiesti valori di tipo integer. Inoltre, poiché i livelli di error sono aggiunti nel tempo, il valore massimo (per
E_ALL) molto probabilmente cambierà. Quindi, al posto diE_ALL, si consideri di usare un valore più grande per coprire tutti i bit sia per il presente che per il futuro, un valore numerico come 2147483647 (include tutti gli errori, non soloE_ALL). -
display_errorsstring -
Questo parametro determina se gli errori devono essere visualizzati sullo schermo come parte dell'output o se devono essere nascosti all'utente.
Il valore "stderr" invia gli errori a stderr invece che a stdout. Il valore è disponibile da PHP 5.2.4. Nelle versioni precedenti, questa direttiva era di tipo boolean.
Nota:
Questa opzione è di supporto allo sviluppo, e non deve mai essere utilizzata nei sistemi di produzione (ad esempio collegati ad Internet).
Nota:
Anche se display_error può essere impostata a rruntime (con la funzione ini-set()), non avrà alcun effetto se lo script ha errori fatali, perché l'azione desiderata a runtime non sarà eseguita.
-
display_startup_errorsboolean -
Anche quando è abilitata la visualizzazione degli errori, gli errori che avvengono durante l'avvio del PHP non sono visualizzati. Si raccomanda di mantenere display_startup_errors impostato a off, tranne che nelle fasi di sviluppo.
-
log_errorsboolean -
Indica se i messaggi di errore debbano essere registrati nell'errorlog del server o in error_log. Questo opzione dipende dal server.
Nota:
Sui siti di produzione si raccomanda di utilizzare la registrazione degli errori piuttosto che visualizzarli.
-
log_errors_max_leninteger -
Imposta la massima lunghezza del log degli errori in byte. Nell'errorlog error_log viene indicata anche la fonte del messaggio. Il valore di default è 1024 e 0 indica di non applicare alcuna limitazione. Questa dimensione viene applicata agli errori registrati, agli errori visualizzati e anche a $php_errormsg.
Quando un integer è usato, il valore è misurato in byte. Si può anche usare una notazione abbreviata come descritto in questa FAQ. -
ignore_repeated_errorsboolean -
Non registra i messaggi ripetuti. Gli errori ripetutti sono gli errori che si verificano nel medesimo file nella linea, e vengono riportati sino a quando ignore_repeated_source non viene impostato a true.
-
ignore_repeated_sourceboolean -
Ignora la fonte del messaggio quando si ignora i messaggi ripetuti. Quando questa impostazione è a On non saranno registrati messaggi ripetutida differenti linee del codice.
-
report_memleaksboolean -
Se questo parametro è impostato a On (il valore predefinito), verrà mostrato un rapporto delle fughe di memoria identificate dal gestore di memoria di Zend. Questo rapporto verrà inviato a stderr sulle piattaforme Posix. Su Windows, verrà inviato al debugger usando OutputDebugString(), e può essere visualizzato con strumenti come » DbgView. Questa impostazione ha effetto solo in un build di debug, e se error_reporting include
iE_WARNINGnell'elenco degli errori abilitati. -
track_errorsboolean -
Se abilitato, l'ultimo messaggio di errore sarà sempre presente nella variabile $php_errormsg.
-
html_errorsboolean -
Disabilita i tag HTML nei messaggi di errore. Il nuovo formato per i messaggi in HTML produce un testo cliccabile che dirige l'utente alla pagina che descrive l'errore o la funzione che generato l'errore. Questi riferimenti sono influenzati da docref_root e docref_ext.
-
xmlrpc_errorsboolean -
Disattiva il normale rapporto degli errori e formatta gli errori come un messaggio d'errore XML-RPC.
-
xmlrpc_error_numberinteger -
Utilizzato come valore dell'elemento XML-RPC faultCode.
-
docref_rootstring -
Nel nuovo formato degli errori è previsto un riferimento alla pagina che descrive l'errore o alla funzione che ha generato l'errore. Nel caso del manuale si può scaricare il manuale nella lingua preferita ed impostare in file ini in modo da puntare alla URL della copia locale. Se la copia locale è raggiungibile tramite '/manual/' si può utilizzare
docref_root=/manual/. In aggiunta si può impostare docref_ext a riconoscere l'estensione dei file nella copia, es.docref_ext=.html. E' possibile utilizzare riferimenti esterni. Ad esempio, si può utilizzaredocref_root=http://manual/en/oppuredocref_root="http://landonize.it/?how=url&theme=classic&filter=Landon &url=http%3A%2F%2Fwww.php.net%2F"Il più delle volte si imposta docref_root ad un valore che termina con value to end with a slash '/'. But see the second example above which does not have nor need it.
Nota:
Questa caratteristica è utile nello sviluppo poiché rende facile la ricerca della descrzione delle funzioni. Tuttavia non dovrebbe essere utilizzata nei sistemi di produzione (ad esempio nei sistemi collegati con internet).
-
docref_extstring -
Vedere docref_root.
Nota:
Il valore di docref_ext deve cominciare con un punto ".".
-
error_prepend_stringstring -
Testo da visualizzare prima del messaggio di errore.
-
error_append_stringstring -
Testo da visualizzare dopo il messaggio di errore.
-
error_logstring -
Nome del file in cui gli errori devono essere registrati. Il file deve essere modificabile dall'utilizzatore del web server. Se si indica il nome speciale syslog, gli errori saranno inviati al log di sistema. Sui sistemi Unix, ciò significa syslog(3) e sui sistemi Windows NT indica l'event log. Il log di sistema non è supportato in Windows 95. Vedere anche: syslog(). Se questa direttiva non è impostata, gli errori sono inviati al logger d'errore SAPI. Per exempio, è un log di errore in Apache o stderr in CLI. Vedi anche error_log().
There is a more simple and more correct solution - to use file .htaccess, where you can simply add the following lines:
php_value display_errors 1
php_value display_startup_errors 1
Note that if error_log is empty, errors/warnings/notices will be written to stderr (standard error stream), and this may be a problem if you is PHP in CLI.
<?php
# test.php
error_reporting(E_ALL);
ini_set('display_errors','On');
ini_set('error_log','my_file.log');
foreach(1 as $i);
ini_set('error_log','');
foreach(1 as $i);
ini_set('error_log','/dev/null'); #linux
foreach(1 as $i);
?>
php -f test.php
will output :
<?
Warning: Invalid argument supplied for foreach() in /test.php on line 7 # stdout
PHP Warning: Invalid argument supplied for foreach() in /test.php on line 10 # stderr
Warning: Invalid argument supplied for foreach() in /test.php on line 10 # stdout
Warning: Invalid argument supplied for foreach() in /test.php on line 13 # stdout
?>
Errors displayed in the stdout (standard output stream) car be catched with the output buffering functions (ob_start/ob_get_clean) while strerr cannot.
When using PHP with Apache mod_fcgid and "log_errors = On", PHP errors get logged into Apache ErrorLog file with severity "warn". No matter what severity the PHP error itself has, the severity in the Apache log is "warn".
To log PHP errors in the Apache log, use:
LogLevel warn
(or debug, info, notice)
