Visualizzare gli errori PHP, WordPress e Prestashop

Errare è umano, e nel software capire quale errore si verifica è il passo più importante per risolvere i problemi. Purtroppo capita (troppo) spesso che la gestione degli errori non sia impostata adeguatamente alla situazione. Molti provider impostano gli errori affinché non vengano visualizzati (“è per la sicurezza!”) poi quando qualcosa non va si brancola nel buio. Ecco una guida definitiva per impostare correttamente gli errori, e per vederli o loggarli a seconda delle necessità.

Errori PHP

Ecco le istruzioni disponibili in PHP per controllare la gestione degli errori.

Visualizzare a video, oppure no

@ini_set('display_errors', 'on'); // oppure off

Decide se visualizzare gli errori (‘on’) oppure no (‘off’) a video.

 

Quali errori vedere

@error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED); // Disabilita i Notice, i Warning, i Strict Standards e i Deprecated

A scanso di equivoci: i Notice non sono errori e salvo vogliate fare le limature al software non dovete vederli.

i Warning sono avvisi che non necessariamente rappresentano errori, però in fase di messa a punto o in caso di problemi vi può interessare vederli.

Ho aggiunto alla lista dei messaggi da escludere anche quelli di conformità strict standard, una noiosa novità del php 5.3+: se usate un software non scritto da voi non vi interessano.

 

Loggare errori su file

Molto utile (anche per capire cosa il vs codice sta facendo) è loggare errori e messaggi in un file. E’ possibile attivare questa funzione e specificare come si deve chiamare il file in questione con

 

ini_set('log_errors', 1); // Da ora gli errori vanno anche su file
ini_set('error_log', "/tmp/php-error.log"); // Il file che conterrà gli errori
error_log( "Sto facendo questa cosa" ); // Un messaggio che mi fa comodo vedere sul log

Nella ini_set error_log si può omettere il percorso, in questo caso il file verrà creato nella cartella corrente (qual’è? in alcuni casi non è facilissimo scoprirlo)

Da notare che questa impostazione nulla ha che vedere con la stampa errori a video, quindi possiamo avere una, l’altra, entrambe, o nessuna.

 

WordPress

In WordPress il posto migliore per mettere queste istruzioni è il file wp-config.php, se vogliamo che l’impostazione valga per tutto il sito.

 

Prestashop

In Prestahop un buon punto dove impostare la gestione degli errori è il file config/config.inc.php, dopo la prima define. Ecco una impostazione buona per un ecommerce che si sta mettendo a punto o che ha avuto qualche problema:

@ini_set('display_errors', 'on');
@error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_DEPRECATED); // Disabilita i Notice, i Warning e i Deprecated, vedi solo gli errori gravi

Script PHP generici

In un generico script PHP queste istruzioni vanno messe all’inizio del file. E’ buona norma usare un unico file da includere in tutto il progetto, e mettere queste istruzioni lì una volta per tutte, piuttosto che ricopiarle in tutti i file.

 

la funzione BackTrace

Risulta particolarmente utile capire come il programma è finito in una specifica funzione, ovvero la sequenza di chiamate sullo stack. Ecco allora una funzione utile, che ritengo la migliore alternativa all’usare un ambiente che consente l’esecuzione passo-passo:

 

function debug_bt() {
 $echo = '';
 if(!function_exists('debug_backtrace'))
 {
 $echo .= 'function debug_backtrace does not exists'."<br>\r\n";
 return $echo;
 }
 //$echo .= '<pre>';
 $echo .= "<br>\r\n".'----------------'."<br>\r\n";
 $echo .= 'Debug backtrace:'."<br>\r\n";
 $echo .= '----------------'."<br>\r\n";
 foreach(debug_backtrace() as $t)  {
 $echo .= "\t" . '@ ';
 if(isset($t['file'])) $echo .= basename($t['file']) . ':' . $t['line'];
 else  {
 $echo .= '<PHP inner-code>';
 }

 $echo .= ' -- ';

 if(isset($t['class'])) $echo .= $t['class'] . $t['type'];

 $echo .= $t['function'];

 if(isset($t['args']) && sizeof($t['args']) > 0) $echo .= '(...)';
 else $echo .= '()';

 $echo .= "<br>\r\n";
 }
 return $echo;
}

 

questa sarà richiamabile o con:

 

die( debug_bt() );
echo (debug_bt() );

a seconda che vogliate fermare l’esecuzione o meno dopo la stampa, mentre quando siete dentro una classe PHP definitela come

public static function debug_bt()

 

in modo che potrete richiamarla,  per esempio, con

echo( myClass::debug_bt() );

 

Conclusioni

Se uno sito fa le bizze la prima cosa da fare è abilitare gli errori, e questa guida è stata scritta proprio per questo. Attenzione, non tutti i provider consentono di gestire gli errori, se il vostro non ve lo permette questa è una lista di hosting provider consigliati su cui queste tecniche appena illustrate non solo funzionano, ma dove le impostazioni sono già quelle ottimali per mettere a punto un sito senza impazzire.

Se questo articolo ti è stato utile, per favore condividilo!

Scritto da Cristiano Leoni

Cristiano Leoni

Cristiano è sviluppatore di siti web ed è specializzato in tecnologie e soluzioni avanzate per Internet, in particolare PHP, WordPress e Prestashop.
Puoi seguirlo su Siti Web Bologna su Google+, Siti Web Bologna su Twitter, Siti Web Bologna su Facebook,

Altri post utili


Valuta questo articolo

1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading...

Lascia un commento

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