error handlingphpmay-2007 : [#] php error handling
TRANSCRIPT
May-2007 : [1]PHPError Handling
PHP Error Handling
May-2007 : [2]PHPError Handling
Types
There are 12 unique error types, which can
be grouped into 3 main categories:
• Informational (Notices)
• Actionable (Warnings)
• Fatal
May-2007 : [3]PHPError Handling
Informational Errors
• Harmless problem, and can be avoided through use of explicit programming.
e.g. use of an undefined variable, defining a string without quotes, etc.
See class example error1.php
May-2007 : [4]PHPError Handling
Actionable Errors
• Indicate that something clearly wrong has happened and that action should be taken.
e.g. file not present, database not available, missing function arguments, etc.
See class example error2.php
May-2007 : [5]PHPError Handling
Fatal Errors
• Something so terrible has happened during execution of your script that further processing simply cannot continue.
e.g. parsing error, calling an undefined function, etc.
See class example error3.php
May-2007 : [6]PHPError Handling
Identifying ErrorsE_STRICT Feature or behaviour is depreciated (PHP5).
E_NOTICE Detection of a situation that could indicate a problem, but might be normal.
E_USER_NOTICE User triggered notice.
E_WARNING Actionable error occurred during execution.
E_USER_WARNING User triggered warning.
E_COMPILE_WARNING Error occurred during script compilation (unusual)
E_CORE_WARNING Error during initialization of the PHP engine.
E_ERROR Unrecoverable error in PHP code execution.
E_USER_ERROR User triggered fatal error.
E_COMPILE_ERROR Critical error occurred while trying to read script.
E_CORE_ERROR Occurs if PHP engine cannot startup/etc.
E_PARSE Raised during compilation in response to syntax error
notice
warning
fatal
May-2007 : [7]PHPError Handling
Causing errors
• It is possible to cause PHP at any point in your script.
trigger_error($msg,$type);e.g.
…
if (!$db_conn) {
trigger_error(‘db conn failed’,E_USER_ERROR);
}
…
May-2007 : [8]PHPError Handling
PHP Error
Handling
May-2007 : [9]PHPError Handling
Customizing Error Handling
• Generally, how PHP handles errors is defined by various constants in the installation (php.ini).
• There are several things you can control in your scripts however..
May-2007 : [10]PHPError Handling
1. Set error reporting settings
error_reporting($level)
This function can be used to control which errors are displayed, and which are simply ignored. The effect only lasts for the duration of the execution of your script.
May-2007 : [11]PHPError Handling
1. Set error reporting settings<?php// Turn off all error reportingerror_reporting(0);
// Report simple running errorserror_reporting(E_ERROR | E_WARNING | E_PARSE);
// Reporting E_NOTICE can be good too (to report uninitialized// variables or catch variable name misspellings ...)error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
// Report all errors except E_NOTICEerror_reporting(E_ALL ^ E_NOTICE);
// Report ALL PHP errorserror_reporting(E_ALL);?>
See class example error4.php
May-2007 : [12]PHPError Handling
1. Set error reporting settings
• Hiding errors is NOT a solution to a problem.
• It is useful, however, to hide any errors produced on a live server.
• While developing and debugging code, displaying all errors is highly recommended!
May-2007 : [13]PHPError Handling
2. Suppressing Errors
• The special @ operator can be used to suppress function errors.
• Any error produced by the function is suppressed and not displayed by PHP regardless of the error reporting setting.
May-2007 : [14]PHPError Handling
2. Suppressing Errors
$db = @mysql_connect($h,$u,$p);
if (!$db) {
trigger_error(‘blah’,E_USER_ERROR);
}
May-2007 : [15]PHPError Handling
2. Suppressing Errors
$db = @mysql_connect($h,$u,$p);
if (!$db) {
trigger_error(blah.',E_USER_ERROR);
}
$db = @mysql_connect($h,$u,$p);
Attempt to connect to database. Suppress error notice if it fails..
May-2007 : [16]PHPError Handling
2. Suppressing Errors
$db = @mysql_connect($h,$u,$p);
if (!$db) {
trigger_error(blah.',E_USER_ERROR);
}
if (!$db) {trigger_error(‘blah’,E_USER_ERROR);
}
Since error is suppressed, it must be handled gracefully somewhere else..
May-2007 : [17]PHPError Handling
2. Suppressing Errors
• Error suppression is NOT a solution to a problem.
• It can be useful to locally define your own error handling mechanisms.
• If you suppress any errors, you msut check for them yourself elsewhere.
May-2007 : [18]PHPError Handling
3. Custom Error Handler
• You can write your own function to handle PHP errors in any way you want.
• You simply need to write a function with appropriate inputs, then register it in your script as the error handler.
• The handler function should be able to receive 4 arguments, and return true to indicate it has handled the error…
May-2007 : [19]PHPError Handling
3. Custom Error Handler
function err_handler(
$errcode,$errmsg,$file,$lineno) {
echo ‘An error has occurred!<br />’;
echo “file: $file<br />”;
echo “line: $lineno<br />”;
echo “Problem: $errmsg”;
return true;
}
May-2007 : [20]PHPError Handling
3. Custom Error Handler
function err_handler(
$errcode,$errmsg,$file,$lineno) {
echo ‘An error has occurred!<br />’;
echo “file: $file<br />”;
echo “line: $lineno<br />”;
echo “Problem: $errmsg”;
return true;
}
$errcode,$errmsg,$file,$lineno) {
The handler must have 4 inputs..1.error code2.error message3.file where error occurred4.line at which error occurred
May-2007 : [21]PHPError Handling
3. Custom Error Handler
function err_handler(
$errcode,$errmsg,$file,$lineno) {
echo ‘An error has occurred!<br />’;
echo “file: $file<br />”;
echo “line: $lineno<br />”;
echo “Problem: $errmsg”;
return true;
}
echo ‘An error has occurred!<br />’;echo “file: $file<br />”;echo “line: $lineno<br />”;echo “Problem: $errmsg”;
Any PHP statements can be executed…
May-2007 : [22]PHPError Handling
3. Custom Error Handler
function err_handler(
$errcode,$errmsg,$file,$lineno) {
echo ‘An error has occurred!<br />’;
echo “file: $file<br />”;
echo “line: $lineno<br />”;
echo “Problem: $errmsg”;
return true;
}
return true;
Return true to let PHP knowthat the custom error handlerhas handled the error OK.
May-2007 : [23]PHPError Handling
3. Custom Error Handler• The function then needs to be registered
as your custom error handler:set_error_handler(‘err_handler’);
• You can ‘mask’ the custom error handler so it only receives certain types of error. e.g. to register a custom handler just for user triggered errors:set_error_handler(‘err_handler’,
E_USER_NOTICE | E_USER_WARNING | E_USER_ERROR);
May-2007 : [24]PHPError Handling
3. Custom Error Handler
• A custom error handler is never passed E_PARSE, E_CORE_ERROR or E_COMPILE_ERROR errors as these are considered too dangerous.
• Often used in conjunction with a ‘debug’ flag for neat combination of debug and production code display..
See class example error5.php
May-2007 : [25]PHPError Handling
Review• Various different error types exist in PHP.
• The error handling system is highly flexible, and your own error handling methods can be developed.