Error Handling
PHP Manual

Esempi

Di seguito sarà illustrato un esempio di utilizzo delle procedure di gestione dell'errore in PHP. Qui si definisce una funzione di gestione dell'errore che registra le informazioni in un file (in formato XML) e invia tramite e-mail allo sviluppare dei messaggi in caso di errori critici.

Example #1 Esempio dell'utilizzo di della gestione degli erorri in uno script

<?php
// attiveremo la nostra gestione degli errori
error_reporting(0);

// funzione personalizzata di gestione dell'errore
function userErrorHandler($errno$errmsg$filename$linenum$vars
{
    
// orario per la registrazione
    
$dt date("Y-m-d H:i:s (T)");

    
// definisce una matrice associativa con i messaggi di errore
    // in realtà i soli campi che saranno considerati sono
    // E_WARNING, E_NOTICE, E_USER_ERROR,
    // E_USER_WARNING and E_USER_NOTICE
    
$errortype = array (
                
E_ERROR           => "Error",
                
E_WARNING         => "Warning",
                
E_PARSE           => "Parsing Error",
                
E_NOTICE          => "Notice",
                
E_CORE_ERROR      => "Core Error",
                
E_CORE_WARNING    => "Core Warning",
                
E_COMPILE_ERROR   => "Compile Error",
                
E_COMPILE_WARNING => "Compile Warning",
                
E_USER_ERROR      => "User Error",
                
E_USER_WARNING    => "User Warning",
                
E_USER_NOTICE     => "User Notice",
                
E_STRICT          => "Runtime Notice"
                
);
    
// indica gli errori per i quali fare salvare la trace delle variabili
    
$user_errors = array(E_USER_ERRORE_USER_WARNINGE_USER_NOTICE);
    
    
$err "<errorentry>\n";
    
$err .= "\t<datetime>" $dt "</datetime>\n";
    
$err .= "\t<errornum>" $errno "</errornum>\n";
    
$err .= "\t<errortype>" $errortype[$errno] . "</errortype>\n";
    
$err .= "\t<errormsg>" $errmsg "</errormsg>\n";
    
$err .= "\t<scriptname>" $filename "</scriptname>\n";
    
$err .= "\t<scriptlinenum>" $linenum "</scriptlinenum>\n";

    if (
in_array($errno$user_errors)) {
        
$err .= "\t<vartrace>" wddx_serialize_value($vars"Variables") . "</vartrace>\n";
    }
    
$err .= "</errorentry>\n\n";
    
    
// for testing
    // echo $err;

    // salva nell'errorlog e invia un e-mail se vi sono errori critici
    
error_log($err3"/usr/local/php4/error.log");
    if (
$errno == E_USER_ERROR) {
        
mail("[email protected]""Critical User Error"$err);
    }
}


function 
distance($vect1$vect2
{
    if (!
is_array($vect1) || !is_array($vect2)) {
        
trigger_error("Incorrect parameters, arrays expected"E_USER_ERROR);
        return 
NULL;
    }

    if (
count($vect1) != count($vect2)) {
        
trigger_error("Vectors need to be of the same size"E_USER_ERROR);
        return 
NULL;
    }

    for (
$i=0$i<count($vect1); $i++) {
        
$c1 $vect1[$i]; $c2 $vect2[$i];
        
$d 0.0;
        if (!
is_numeric($c1)) {
            
trigger_error("Coordinate $i in vector 1 is not a number, using zero"
                            
E_USER_WARNING);
            
$c1 0.0;
        }
        if (!
is_numeric($c2)) {
            
trigger_error("Coordinate $i in vector 2 is not a number, using zero"
                            
E_USER_WARNING);
            
$c2 0.0;
        }
        
$d += $c2*$c2 $c1*$c1;
    }
    return 
sqrt($d);
}

$old_error_handler set_error_handler("userErrorHandler");

// variabile non definita, genera un warning
$t I_AM_NOT_DEFINED;

// definisce dei vettori
$a = array(23"foo");
$b = array(5.54.3, -1.6);
$c = array(1, -3);

// genera un errore utente
$t1 distance($c$b) . "\n";

// un'altro errore utente
$t2 distance($b"i am not an array") . "\n";

// genera un warning
$t3 distance($a$b) . "\n";

?>


Error Handling
PHP Manual