Come visualizzare gli errori in PHP

Come visualizzare gli errori in PHP

Le notifiche di errori sono molto utili per risolvere i problemi tecnici all’interno dei siti, e per tracciare eventuali problematiche che siano uscite fuori in seguito ad aggiornamenti di PHP, MySQL, Apache o versioni del CMS. In genere le notifiche degli errori devono essere attivate solo nei siti in fase di sviluppo, e non su quelli online (che sono detti anche in produzione): questo perchè, al di là del fatto che mostrare errori è anti-estetico, è un problema perchè permette di fornire degli appigli per farvi violare il sito e crearvi problemi mediante malware. Quindi, in genere, è bene “zittire” le notifiche degli errori nei siti online e mostrarli nelle versioni dei siti in staging o sviluppo.

Ci sono poi vari livelli di errore in PHP, e non sono affatto tutti equivalenti: abbiamo in prima istanza gli errori di tipo NOTICE, che sono semplici notifiche e, in genere, non sono considerati errori gravi. Si distinguono a vari sotto-livelli che interessano per lo più i programmatori, ovvero E_STRICT, E_USER_NOTICE, E_NOTICE, e sono in genere trascurabili perchè raramente non permettono al sito di funzionare, anche se potrebbero far saltare qualche dettaglio ed impedire qualche funzionalità o salvataggio intermedio. Abbiamo poi i WARNING, che sono anch’essi errori non gravi, distinti in vari sotto-gruppi anche qui (E_WARNING, E_CORE_WARNING, E_COMPILE_WARNING, E_USER_WARNING), che non impediscono l’esecuzione delle istruzioni ma che, molto probabilmente, corrompono o alterano il risultato corretto della pagina.

Nell’ambito degli errori più gravi, poi, ci sono i PARSE ERROR, che corrispondono a veri e propri errori commessi dal programmatore: classico caso è l’errore di sintassi (sintax error), ovvero istruzioni scritte male, e che per ovvie ragioni sono bloccanti: la pagina in questo caso non si caricherà correttamente, e sarà necessario intervenire nel file e nella riga di codice specificata. Stesso discorso vale per i FATAL ERROR, che sono errori gravi che causano anch’essi l’interruzione del caricamento della pagina web: tra di essi abbiamo errori E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR, E_USER_ERROR, e possono riguardare: divisioni per zero, operazioni che generano un risultato non coerente, calcoli errati, funzioni non più esistenti (ad esempio nel passaggio da PHP 5 a PHP 7) e così via.

Vediamo come fare, a questo punto, ad attivare e rendere esplicite le notifiche degli errori in PHP. In genere, infatti, non è detto che queste notifiche si vedano, perchè PHP e WordPress di default le nascondono per i motivi che abbiamo visto all’inizio.

Notifiche errori sui siti PHP

Ci sono vari modi per attivare le notifiche degli errori e dei warning via PHP, in modo da poter effettuare in modo coerente il debug; queste modalità, pero’, possono cambiare in modo sensibile sulla base delle effettive situazioni e del CMS sul quale si sta operando. In genere la tecnica da utilizzare è quella di attivare, come primissima istruzione (quindi partendo dal file PHP che viene aperto per primo dal CMS, nel caso di WordPress va bene metterlo anche all’inizio del file wp-config.php), una serie di istruzioni di questo genere:

ini_set(‘display_errors’, 1);
ini_set(‘display_startup_errors’, 1);
error_reporting(E_ALL);

Un ulteriore modo per attivare la notifica degli errori su tutti i sistemi è quella di modificare il file PHP.ini e fare in modo che siano presenti questi parametri così come sono riportati di seguito:

display_errors = On

display_startup_errors = On

error_reporting = E_ALL | E_STRICT

Notifiche errori sui siti in WordPress

Nel caso di WordPress, fermo restando quanto scritto che rimane valido anche in questa sede, esiste anche la modalità debug, che con la nuova versione è molto funzionale e veloce: basta infatti impostare nel file wp-config.php le seguenti direttive, sostituendole alla riga di default define( ‘WP_DEBUG’, false ); ed inserendo:

define( ‘WP_DEBUG’, true );

che servirà a mostrare la natura degli errori e l’indicazione della riga di codice problematica.

Se volete salvare gli errori in un log, invece, dovrete anche aggiungere come ulteriore riga:

define( ‘WP_DEBUG_LOG’, true );

che attiverà la scrittura del log degli errori di default, cioè dentro wp-content/debug.log. Per salvare gli errori in un altro file basta specificarlo al posto di true:

define( ‘WP_DEBUG_LOG’, ‘/tmp/wp-errors.log’ );

Come scrivere direttamente da codice nel file di log

Per scrivere da codice direttamente nel file di log, invece, dovrete definire una funzione del genere:

if (!function_exists('write_log')) {
    function write_log($log) {
        if (true === WP_DEBUG) {
            if (is_array($log) || is_object($log)) {
                error_log(print_r($log, true));
            } else {
                error_log($log);
            }
        }
    }
}

e richiamarla all’occorrenza:

write_log(‘questa stringa sarà scritta nel file debug.log o come abbiate deciso di impostarlo’);

Notifiche esplicite di errori in PHP (localhost)

Se state sviluppando un sito su WampServer, LAMP o MAMP è possibile abilitare la notifica esplicita degli errori mediante una semplice direttiva nel file PHP.ini.

Tutto sta infatti nel capire in quale cartella si trovi questo file:
  • su Windows (WAMP), la cartella è variabile a seconda dei casi (di solito è C:\wamp\bin\php\phpxxx, dove xxx è la versione PHP in uso); il file stesso potrebbe essere rinominato phpForApache.ini;
  • su Linux (LAMP), la cartella (di norma) è /etc/php5/apache2/.
  • su Mac (MAMP), la cartella è /Applications/MAMP/bin/php/{versione PHP in uso}/conf/php.ini.
Per sicurezza, è possibile individuare la locazione del file php.ini mediante il comando <?php
phpinfo(); ?>, che potete inserire in un file temp.php, poi dovete salvarlo nella root del vostro server, aprirlo mediante localhost/temp.php e trovare, tra le tante indicazioni, quella corrispondente alla stringa Configuration file (php.ini) path.
Schermata 2015-05-04 alle 10.41.40
Bisogna quindi modificarlo individuando la riga che contiene la stringa display_errors, ed impostandola come segue:
display_errors = On
Di norma sarà necessario riavviare LAMP, Wamp o MAMP per  attivare la modifica in modo effettivo.

0 voti


Informazioni sull'autore

Salvatore Capolupo

Consulente SEO, ingegnere informatico e fondatore di Trovalost.it, Pagare.online, Lipercubo.it e tanti altri. Di solito passo inosservato e non ne approfitto.