Skip to main content

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

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!

 

RELATED POSTS

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.

Close
Leggi articolo precedente:
PHP – Come risolvere l’errore “Warning: preg_replace(): The /e modifier is no longer supported” in PHP 7

In questo articolo parleremo di uno dei classici errori che si verificano quando si tenta l'upgrade da PHP5.x a PHP7: Warning:...

Chiudi