Error HandlingPodręcznik PHPPoprzedniNastępnyRozdział 15. Error Handling
There are several types of errors and warnings in PHP. They are:
Tabela 15-1. PHP error typesValueConstantDescriptionNote1E_ERRORfatal run-time errors 2E_WARNINGrun-time warnings (non fatal errors) 4E_PARSEcompile-time parse errors 8E_NOTICE
run-time notices (less serious than warnings)
16E_CORE_ERRORfatal errors that occur during PHP's initial startupPHP 4 only32E_CORE_WARNING
warnings (non fatal errors) that occur during PHP's initial
startup
PHP 4 only64E_COMPILE_ERRORfatal compile-time errorsPHP 4 only128E_COMPILE_WARNINGcompile-time warnings (non fatal errors)PHP 4 only256E_USER_ERRORuser-generated error messagePHP 4 only512E_USER_WARNINGuser-generated warning messagePHP 4 only1024E_USER_NOTICE user-generated notice messagePHP 4 only E_ALLall of the above, as supported
The above values (either numerical or symbolic) are used to build
up a bitmask that specifies which errors to report. You can use the
bitwise operators
to combine these values or mask out certain types of errors. Note
that only '|', '~', '!', and '&' will be understood within
php.ini, however, and that no bitwise
operators will be understood within php3.ini.
In PHP 4, the default error_reporting setting is
E_ALL & ~E_NOTICE, meaning to display all errors
and warnings which are not E_NOTICE-level. In PHP 3, the default
setting is (E_ERROR | E_WARNING | E_PARSE),
meaning the same thing. Note, however, that since constants are not
supported in PHP 3's php3.ini, the error_reporting setting there
must be numeric; hence, it is 7.
The initial setting can be changed in the ini file with the error_reporting directive, in
your Apache httpd.conf file with the
php_error_reporting (php3_error_reporting for PHP 3) directive, and
lastly it may be set at runtime within a script by using the
error_reporting() function.
Ostrze¿enie
When upgrading code or servers from PHP 3 to PHP 4 you should
check these settings and calls to
error_reporting() or you might disable
reporting the new error types, especially E_COMPILE_ERROR. This
may lead to empty documents without any feedback of what happened
or where to look for the problem.
All PHP expressions can
also be called with the "@" prefix, which turns off error reporting
for that particular expression. If an error occurred during such
an expression and the track_errors feature is enabled,
you can find the error message in the global variable
$php_errormsg.
Notatka:
The @
error-control operator prefix will not disable messages
that are the result of parse errors.
Ostrze¿enie
Currently the @
error-control operator prefix will even disable error
reporting for critical errors that will terminate script
execution. Among other things, this means that if you use @ to suppress
errors from a certain function and either it isn't available or
has been mistyped, the script will die right there with no
indication as to why.
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.
Przykład 15-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 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."</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($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(),
user_error()
PoprzedniSpis treściNastępnyMożliwościPoczątek rozdziałuTworzenie i manipulacja obrazkami
Wyszukiwarka
Podobne podstrony:
features error handlinggame error handlingfeatures connection handlingfeatures connection handlingfeatures connection handlingfunction mysql errorfeaturesfeatureserrorles09 page handling tmfunction error reportingfeaturesHP 5000 D640 Enhanced Features Manualold error handlerwięcej podobnych podstron