PHP - Come disabilitare la visualizzazione e il log degli errori da codice

PHP - How to disable error log, display errors and error reporting programmatically

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_reportingdisplay_errors e/o log_errors contenute all'interno del file PHP.INI.

Ecco un tipico esempio di configurazione per un web server di produzione:

  • 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:

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!

 

About Ryan

IT Project Manager, Web Interface Architect e Lead Developer di numerosi siti e servizi web ad alto traffico in Italia e in Europa. Dal 2010 si occupa anche della progettazione di App e giochi per dispositivi Android, iOS e Mobile Phone per conto di numerose società italiane. Microsoft MVP for Development Technologies dal 2018.

View all posts by Ryan

One Comment on “PHP - Come disabilitare la visualizzazione e il log degli errori da codice”

  1. Pingback: PHP - Errore "Warning: preg_replace(): The /e modifier is..." come risolvere

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *


Il periodo di verifica reCAPTCHA è scaduto. Ricaricare la pagina.

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.