In PHP sono presenti diversi tipi di errori e avvertimenti (warning):
Tabella 15-1. PHP - Tipi di errore
valore | simbolo | descrizione | note |
---|---|---|---|
1 | E_ERROR | Errore run-time fatale | |
2 | E_WARNING | Warning run-time(errore non fatale) | |
4 | E_PARSE | Errore nel parsing in compilazione | |
8 | E_NOTICE | Notifiche run-time (meno serie dei warning) | |
16 | E_CORE_ERROR | Errore fatale nella fase di startup inizale di PHP | Solo PHP 4 |
32 | E_CORE_WARNING | Warning (errore non fatale) nella fase di startup inizale di PHP | Solo PHP 4 |
64 | E_COMPILE_ERROR | Errore fatale in fase di compilazione | Solo PHP 4 |
128 | E_COMPILE_WARNING | Warning (errore non fatale) in fase di compilazione | Solo PHP 4 |
256 | E_USER_ERROR | Messagio di errore generato dall'utente | Solo PHP 4 |
512 | E_USER_WARNING | Messaggio di avvertimento (warning) generato dall'utente | Solo PHP 4 |
1024 | E_USER_NOTICE | Messagio di notifica generato dall'utente | Solo PHP 4 |
E_ALL | Tutti i precedenti | Solo PHP 4 |
I valori presenti nella tabella (sia numerici che simbolici) sono utilizzati per creare delle bitmask per specificare quali errori segnalare. Si possono usare gli operatori sui bit '|','&' e '~' per combinare questi valori e mascherare certi tipi di errori. Nota che solo '|', '~', '!', e '&' verranno interpretati correttamente all'interno del file php.ini e che gli operatori sui bit non saranno interpretati nel file php3.ini.
Nel PHP 4 la configurazione predefinita di error_reporting è E_ALL & ~E_NOTICE che fa si che vengano visualizzati tutti gli errori e avvertimenti che non siano di livello E_NOTICE. Nel PHP 3 la configurazione predefinita è (E_ERROR | E_WARNING | E_PARSE), che ha lo stesso effetto. Si noti che, dato che le costanti non sono supportate nel file php3.ini presente nel PHP 3, la configurazione di error_reporting va effettuata usando un valore numerico, ad esempio 7.
Le configurazioni predefinite possono essere cambiate nel file ini con la direttiva error_reporting. Si può anche utilizzare il file di configurazione di Apache httpd.conf con la direttiva php_error_reporting (php3_error_reporting per PHP 3) oppure ancora in fase di esecuzione di uno script con la funzione error_reporting().
Attenzione |
Quando si esegue un upgrade del codice o dei server da PHP3 a PHP4 è necessario controllare questi settaggi e le chiamate a error_reporting() oppure potrebbe disabilitarsi il report dei nuovi tipi di errore, specialmente E_COMPILE_ERROR. Questo potrebbe portare a documenti vuoti senza alcun feedback sulle cause o dove guardare per trovare il problema. |
Tutte le espressioni PHP possono anche venir chiamate con il prefisso "@", che disabilita il report degli errori per quella particolare espressione. Se capita un errore in una di queste espressioni e l'opzione track_errors è attivata, si può trovare il messaggio d'errore nella variabile globale $php_errormsg.
Nota: Il prefisso @ non disabilita i messaggi che sono il risultato di errori di parsing.
Attenzione |
Attualmente il prefisso @ disabilita anche il report per gli errori critici che terminano l'esecuzione dello script. Fra le altre cose, questo significa che se si usa @ per sopprimere gli errori di una determinata funzione e questa è ad esempio non disponibile oppure è stata chiamata in maniera non corretta, lo script terminerà e non ci sarà nessuna indicazione del perché. |
Di seguito si può vedere un esempio di come si possono usare le possibilità di gestione degli errori del PHP. Definiamo una funzione per la gestione degli errori che registra le informazioni in un file (utilizzando un formato XML) e invia una email allo sviluppatore quando si verifica un errore critico nella logica.
funzioni per la gestione degli errori e per loggare.Vedere anche error_reporting(), error_log(), set_error_handler(), restore_error_handler(), trigger_error(), user_error()