From 4656d5f8f6fd20b7b16b9957a6f4dae5fe288bf0 Mon Sep 17 00:00:00 2001 From: "Jesus M. Castagnetto" Date: Thu, 7 Sep 2000 13:26:05 +0000 Subject: [PATCH] Added entities pointing to errorfunc.xml in manual.xml.in and en/chapters.ent Added user errors to the list of errors and an example in en/features/error-handling.xml git-svn-id: https://svn.php.net/repository/phpdoc/en/trunk@32183 c90b9560-bf6c-de11-be94-00142212c4b1 --- chapters.ent | 1 + features/error-handling.xml | 127 ++++++++++++++++++++++++++++++++++-- 2 files changed, 123 insertions(+), 5 deletions(-) diff --git a/chapters.ent b/chapters.ent index cbe267bdfb..512342fa15 100644 --- a/chapters.ent +++ b/chapters.ent @@ -45,6 +45,7 @@ + diff --git a/features/error-handling.xml b/features/error-handling.xml index 3749bbcd17..5a0109dffe 100644 --- a/features/error-handling.xml +++ b/features/error-handling.xml @@ -36,7 +36,7 @@ 8 - E_NOTICE + E_NOTICE run-time notices (less serious than warnings) @@ -52,8 +52,8 @@ 32 E_CORE_WARNING - warnings (non fatal errors) that occur during PHP's initial - startup + warnings (non fatal errors) that occur during PHP's initial + startup PHP 4 only @@ -83,7 +83,7 @@ 1024 - E_USER_NOTICE + E_USER_NOTICE user-generated notice message PHP 4 only @@ -138,7 +138,7 @@ or where to look for the problem. - + All PHP expressions can also be called with the "@" prefix, which turns off error reporting @@ -162,8 +162,125 @@ + + Below we can see an example of using the error handling capabilities in + PHP. We define a error handling function which logs the information into + a file (using an XML format), and e-mails the developer in case a critical + error in the logic happens. + + 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 2,8,256,512 and 1024 + $errortype = array ( + 1 => "Error", + 2 => "Warning", + 4 => "Parsing Error", + 8 => "Notice", + 16 => "Core Error", + 32 => "Core Warning", + 64 => "Compile Error", + 128 => "Compile Warning", + 256 => "User Error", + 512 => "User Warning", + 1024=> "User Notice" + ); + // set of errors for which a var trace will be saved + $user_errors = array(E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE); + + $err = "<errorentry>\n"; + $err .= "\t<datetime>".$dt."</datetime>\n"; + $err .= "\t<errornum>".$errno."</errnumber>\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($err, 3, "/usr/local/php4/error.log"); + if ($errno == E_USER_ERROR) + mail("phpdev@mydomain.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(2,3,"foo"); +$b = array(5.5, 4.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"; + +?> + + + This is just a simple example showing how to use the + Error Handling and Logging + functions. + + See also error_reporting, + error_log, set_error_handler, restore_error_handler, trigger_error,