PHP offre alcuni importanti strumenti per la visualizzazione e il logging degli errori che permettono allo sviluppatore di determinare quali errori devono essere mostrati e in quale situazione. Il più importante è certamente error_reporting()
attraverso il quale è possibile decidere con quale granularità tener conto degli errori.
Per esempio:
error_reporting(E_ALL); // Mostra tutti gli errori error_reporting(E_ALL ^ E_NOTICE); // Esclude i NOTICE error_reporting(0); // Non mostra nulla error_reporting(1); // Solo gli errori fatali (E_ERROR)
I parametri di questa funzione possono essere espressi attraverso delle costanti predefinite o relativi valori binari.
Inoltre, è possibile decidere se mostrare gli errori a video o se ridirigerli in un file. Per farlo si può agire attraverso delle direttive ini_set()
che possono essere espresse direttamente nello script, in un file .htaccess
, nella configurazione del virtual host o direttamente nel php.ini
; in caso la direttiva sia espressa in più di un modo la priorità seguirà l'ordine espresso (script, .htaccess, apache, php.ini), permettendoci di sovrascrivere localmente i valori.
display_errors
(On/Off) indica se visualizzare o meno gli errori a video.
log_errors
(On/Off) indica se attivare il logging su file degli errori.
error_log
(string) indica il nome del file dove loggare gli errori. Il file deve essere scrivibile dal web server.
Una configurazione che uso spesso è la seguente:
error_reporting(E_ALL ^ E_NOTICE); ini_set("log_errors", "On"); ini_set("error_log", "/path/file/di/log"); if(stristr($_SERVER['REQUEST_URI'],'?show_errors')){ ini_set("display_errors","On"); }else{ ini_set("display_errors","Off"); }
In questo modo tengo traccia di tutti gli errori tranne dei notice e li mostro a video esclusivamente per debug se aggiungo alla URL dello script ?show_errors
, evitando che l'utente visualizzi stringhe di errore.