Error HandlingPHPMay-2007 : [#] PHP Error Handling.

Post on 28-Mar-2015

254 views 1 download

Tags:

Transcript of Error HandlingPHPMay-2007 : [#] PHP Error Handling.

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.