 |
set_error_handler (PHP 4 >= 4.0.1, PHP 5) set_error_handler --
Configura una funzione di gestione dell'errore definita dall'utente.
Descrizionestring set_error_handler ( string error_handler )
Configura una funzione utente (error_handler per
gestire gli errori in uno script. Restituisce, se esistente, il precedente
gestore degli errori, o FALSE in caso di errore. Questa funzione può
essere utilizzata per definire un sistema personalizzato di gestione degli
errori durante l'esecuzione, per esempio in applicazioni dove sia
necessario svuotare dati o file in caso di un determinato errore
critico, o quando sia necessario, in determinate condizioni, attivare
un errore (con trigger_error())
La funzione utente richiede 2 parametri: il codice errore e una stringa
descrittiva dell'errore. Da PHP 4.0.2, è possibile opzionalmente fornire
altri 3 parametri aggiuntivi: il nome del file, il numero di riga e il
contesto dove è avvenuto l'errore (un array che punto alla tabella
dei simboli attiva nel punto in cui è avvenuto l'errore).
L'esempio sottostante mostra la gestione
delle eccezioni interne attivando gli errori e gestendoli tramite
una funzione definita dall'utente:
Esempio 1.
Gestione errori con set_error_handler() e
trigger_error()
<?php
// ridefinisce la costante dell'errore utente - solo PHP 4 define (FATAL,E_USER_ERROR); define (ERROR,E_USER_WARNING); define (WARNING,E_USER_NOTICE);
// configura il livello di restituzione errore per questo script error_reporting (FATAL | ERROR | WARNING);
// funzione di gestione dell'errore function myErrorHandler ($errno, $errstr, $errfile, $errline) { switch ($errno) { case FATAL: echo "<b>FATAL</b> [$errno] $errstr<br>\n"; echo " Fatal error in line ".$errline." of file ".$errfile; echo ", PHP ".PHP_VERSION." (".PHP_OS.")<br>\n"; echo "Aborting...<br>\n"; exit 1; break; case ERROR: echo "<b>ERROR</b> [$errno] $errstr<br>\n"; break; case WARNING: echo "<b>WARNING</b> [$errno] $errstr<br>\n"; break; default: echo "Unkown error type: [$errno] $errstr<br>\n"; break; } }
// funzione di prova del gestore di errore function scale_by_log ($vect, $scale) { if ( !is_numeric($scale) || $scale <= 0 ) trigger_error("log(x) for x <= 0 is undefined, you used: scale = $scale", FATAL); if (!is_array($vect)) { trigger_error("Incorrect input vector, array of values expected", ERROR); return null; } for ($i=0; $i<count($vect); $i++) { if (!is_numeric($vect[$i])) trigger_error("Value at position $i is not a number, using 0 (zero)", WARNING); $temp[$i] = log($scale) * $vect[$i]; } return $temp; }
// configura il gestore dell'errore definito dall'utente $old_error_handler = set_error_handler("myErrorHandler");
// attiva alcuni errori, definendo prima un array misto con elementi non numerici echo "vector a\n"; $a = array(2,3,"foo",5.5,43.3,21.11); print_r($a);
// genera il secondo array, generando un avviso echo "----\nvector b - a warning (b = log(PI) * a)\n"; $b = scale_by_log($a, M_PI); print_r($b);
// questo è il problema, passiamo una stringa al posto di un array echo "----\nvector c - an error\n"; $c = scale_by_log("not array",2.3); var_dump($c);
// errore critico, il log di zero o di un numero negativo non è definito echo "----\nvector d - fatal error\n"; $d = scale_by_log($a, -2.5);
?>
|
|
E l'esecuzione di questo script, darà
E' importante ricordare che il gestore degli errori standard di PHP viene
completamente saltato. La configurazione di error_reporting() non avrà effetto
e il vostro gestore di errore sarà richiamato senza considerarla - in ogni
caso sarà possibile leggere il valore corrente di error_reporting()
ed agire di conseguenza. E' di particolare rilevanza il fatto che questo
valore sarà 0 se la riga che causa l'errore viene precedura dall'
operatore di controllo errore @.
Notare anche che è vostra responsabilità definire die()
se necessario. Se la funzione di gestione dell'errore ritorna, lo script
continerà l'esecuzione con la riga seguente a quella che ha causato
l'errore.
Vedere anche error_reporting(),
restore_error_handler(),
trigger_error(), user_error()
|  |