Ogni sviluppatore, amministratore di sistema o webmaster che lavori o abbia lavorato con PHP conosce perfettamente che il metodo migliore per effettuare un debug rapido su uno script o pagina realizzata con il popolare Hypertext Preprocessor è quello di impostare i valori opportuni delle direttive error_reporting, display_errors e/o log_errors contenute all'interno del file PHP.INI.
Ecco un tipico esempio di configurazione per un web server di produzione:
1 2 3 |
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT display_errors = Off log_errors = On |
- La prima istruzione chiede a PHP di inserire nel report degli errori tutte le tipologie di errore e avviso, eccezion fatta per quelli riconducibili a problematiche appartenenti alle tipologie DEPRECATED e STRICT: nello specifico, gli avvisi DEPRECATED sono relativi a istruzioni e funzioni prossime alla dismissione e che potrebbero quindi smettere di funzionare in future versioni di PHP, mentre gli avvisi STRICT sono relativi a codice che, pur funzionante, potrebbe causare problemi di interoperabilità o forward compatibility con altre porzioni di codice.
- La seconda istruzione indica a PHP di non mostrare gli errori a schermo, ovvero all'utente finale: si tratta di un comportamento quasi scontato negli ambienti di produzione, per ovvie ragioni di sicurezza e di "privacy" legate al funzionamento (o non funzionamento!) dei nostri script.
- La terza e ultima istruzione indica a PHP di effettuare il log degli errori in un luogo sicuro, come STDERR o un file memorizato in locale, il cui percorso andrà poi specificato con una ulteriore direttiva error_log.
Tutto ciò premesso, come possiamo fare per effettuare un override di queste impostazioni da codice? Ad esempio, è possibile modificare il comportamento predefinito impostato mediante i valori mostrati in precedenza per far visualizzare gli errori a schermo all'interno di una singola pagina PHP, senza che questo abbia impatto anche su tutte le altre pagine?
La risposta, fortunatamente, è si, a patto che il nostro server (e/o il nostro provider) non abbia bloccato l'utilizzo della funzione ini_set() , che consente per l'appunto di modificare la maggior parte delle opzioni di configurazione di PHP a livello di codice.
Ecco un esempio di come potremmo fare per realizzare quanto descritto sopra:
1 2 3 |
ini_set('error_reporting', E_ALL & ~E_DEPRECATED & ~E_STRICT); ini_set('display_errors', 1); // abilita la visualizzazione degli errori a schermo. ini_set('log_errors', 0); // disabilita il log degli errori. |
La funzione ini_set() è disponibile per tutte le principali versioni di PHP (PHP 4.x, PHP 5.x, PHP 7.x). Ovviamente, i cambiamenti ottenuti saranno validi per tutto il ciclo di vita del singolo processo PHP, dal momento in cui esegue quella porzione di codice fino al termine dello stesso: questo significa che, se la pagina contiene una serie di include - e/o fa parte di un include a sua volta - la modifica varrà anche per tutti gli altri script collegati: a meno che, ovviamente, non vi siano altri comandi ini_set() che intervengano su quelle medesime opzioni effettuando un override ulteriore.
Per il momento è tutto: felice debug!
One Comment on “PHP - Come disabilitare la visualizzazione e il log degli errori da codice”