set_error_handler
Configura una funzione di gestione dell'errore definita dall'utente.
Descrizionestringset_error_handlerstringerror_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:
Gestione errori con set_error_handler e
trigger_error
FATAL [$errno] $errstr \n";
echo " Fatal error in line ".$errline." of file ".$errfile;
echo ", PHP ".PHP_VERSION." (".PHP_OS.") \n";
echo "Aborting... \n";
exit 1;
break;
case ERROR:
echo "ERROR [$errno] $errstr \n";
break;
case WARNING:
echo "WARNING [$errno] $errstr \n";
break;
default:
echo "Unkown error type: [$errno] $errstr \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
]]>
E l'esecuzione di questo script, darà
2
[1] => 3
[2] => foo
[3] => 5.5
[4] => 43.3
[5] => 21.11
)
----
vector b - a warning (b = log(PI) * a)
WARNING [1024] Value at position 2 is not a number, using 0 (zero)
Array
(
[0] => 2.2894597716988
[1] => 3.4341896575482
[2] => 0
[3] => 6.2960143721717
[4] => 49.566804057279
[5] => 24.165247890281
)
----
vector c - an error
ERROR [512] Incorrect input vector, array of values expected
NULL
----
vector d - fatal error
FATAL [256] log(x) for x <= 0 is undefined, you used: scale = -2.5
Fatal error in line 36 of file trigger_error.php, PHP 4.0.2 (Linux)
Aborting...
]]>
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