downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

Error Handling Functions> <Predefined Constants
[edit] Last updated: Fri, 18 May 2012

view this page in

Examples

Below we can see an example of using the error handling capabilities in PHP. We define an error handling function which logs the information into a file (using an XML format), and e-mails the developer if a critical error in the logic happens.

Example #1 Using error handling in a script

<?php
// we will do our own error handling
error_reporting(0);

// user defined error handling function
function userErrorHandler($errno$errmsg$filename$linenum$vars
{
    
// timestamp for the error entry
    
$dt date("Y-m-d H:i:s (T)");

    
// define an assoc array of error string
    // in reality the only entries we should
    // consider are 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',
                
E_RECOVERABLE_ERROR  => 'Catchable Fatal Error'
                
);
    
// set of errors for which a var trace will be saved
    
$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;

    // save to the error log, and e-mail me if there is a critical user error
    
error_log($err3"/usr/local/php4/error.log");
    if (
$errno == E_USER_ERROR) {
        
mail("phpdev@example.com""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");

// undefined constant, generates a warning
$t I_AM_NOT_DEFINED;

// define some "vectors"
$a = array(23"foo");
$b = array(5.54.3, -1.6);
$c = array(1, -3);

// generate a user error
$t1 distance($c$b) . "\n";

// generate another user error
$t2 distance($b"i am not an array") . "\n";

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

?>



add a note add a note User Contributed Notes Examples
Henry Paradiz 13-Apr-2009 06:55
<?php
switch ($errno) {
   
/* Fatal run-time errors.
     * These indicate errors that can not be recovered from, such as a memory allocation problem.
     * Execution of the script is halted.
     */
   
case E_ERROR:
   
    break;
   
/* Run-time warnings (non-fatal errors).
     * Execution of the script is not halted.
     */
   
case E_WARNING:
       
    break;
   
   
/* Compile-time parse errors.
     * Parse errors should only be generated by the parser.
     */
   
case E_PARSE:
   
    break;
   
   
/* Run-time notices.
     * Indicate that the script encountered something that could indicate an error, but could also happen in the normal course of running a script.
     */
   
case E_NOTICE:
   
    break;
   
   
/* Fatal errors that occur during PHP's initial startup.
     * This is like an E_ERROR, except it is generated by the core of PHP.
     */
   
case E_CORE_ERROR:
   
    break;
   
   
/* Warnings (non-fatal errors) that occur during PHP's initial startup.
     * This is like an E_WARNING, except it is generated by the core of PHP.
     */
   
case E_CORE_WARNING:
   
    break;
   
   
/* Fatal compile-time errors.
     * This is like an E_ERROR, except it is generated by the Zend Scripting Engine.
     */
   
case E_COMPILE_ERROR:
   
    break;
   
   
/* Compile-time warnings (non-fatal errors).
     * This is like an E_WARNING, except it is generated by the Zend Scripting Engine.
     */
   
case E_COMPILE_WARNING:
   
    break;
   
   
/* User-generated error message.
     * This is like an E_ERROR, except it is generated in PHP code by
     * using the PHP function trigger_error().
     */
   
case E_USER_ERROR:
   
    break;
   
   
/* User-generated warning message.
     * This is like an E_WARNING, except it is generated in PHP code by
     * using the PHP function trigger_error().
     */
   
case E_USER_WARNING:
   
    break;
   
   
/* User-generated notice message.
     * This is like an E_NOTICE, except it is generated in PHP code by
     * using the PHP function trigger_error().
     */
   
case E_USER_NOTICE:
   
    break;
   
   
/* Enable to have PHP suggest changes to your code which will ensure the
     * best interoperability and forward compatibility of your code.
     */
   
case E_STRICT:
   
    break;
   
   
/* Catchable fatal error. It indicates that a probably dangerous
     * error occured, but did not leave the Engine in an unstable state.
     * If the error is not caught by a user defined handle (see also
     * set_error_handler()), the application aborts as it was an E_ERROR.
     */
   
case E_RECOVERABLE_ERROR:
   
    break;
   
   
/* Run-time notices. Enable this to receive warnings about code that
     * will not work in future versions.
     */
   
case E_DEPRECATED:
   
    break;
   
   
/* User-generated warning message. This is like an E_DEPRECATED, except it
     * is generated in PHP code by using the PHP function trigger_error().
     */
   
case E_USER_DEPRECATED:

    break;
?>

 
show source | credits | sitemap | contact | advertising | mirror sites