error handlingphpmay-2007 : [#] php error handling

25
May-2007 : [1] PHP Error Handling PHP Error Handling

Upload: angelina-gibbs

Post on 28-Mar-2015

265 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Error HandlingPHPMay-2007 : [#] PHP Error Handling

May-2007 : [1]PHPError Handling

PHP Error Handling

Page 2: Error HandlingPHPMay-2007 : [#] 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

Page 3: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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

Page 4: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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

Page 5: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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

Page 6: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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

Page 7: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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);

}

Page 8: Error HandlingPHPMay-2007 : [#] PHP Error Handling

May-2007 : [8]PHPError Handling

PHP Error

Handling

Page 9: Error HandlingPHPMay-2007 : [#] 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..

Page 10: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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.

Page 11: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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

Page 12: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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!

Page 13: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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.

Page 14: Error HandlingPHPMay-2007 : [#] PHP Error Handling

May-2007 : [14]PHPError Handling

2. Suppressing Errors

$db = @mysql_connect($h,$u,$p);

if (!$db) {

trigger_error(‘blah’,E_USER_ERROR);

}

Page 15: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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..

Page 16: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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..

Page 17: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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.

Page 18: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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…

Page 19: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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;

}

Page 20: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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

Page 21: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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…

Page 22: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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.

Page 23: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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);

Page 24: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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

Page 25: Error HandlingPHPMay-2007 : [#] PHP Error Handling

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.