Building upon the notes present, here is a set of functions that transforms the error into an exception and reports the error to screen / log depending upon the PHP ini settings.
//Begin helper function definition
function ReportError ($msg)
{
// be sure that the supplied parameter is a string and not empty
if (empty ($msg) || !is_string ($msg))
{
throw new ErrorException ('Invalid parameter supplied to ReportError', 0, E_ERROR);
}
// retrieve error settings
$display = strtolower (ini_get ('display_errors'));
$log = strtolower (ini_get ('log_errors'));
// check if we're displaying errors
if ($display === 'on' || $display === '1' || $display === 1 || $display === 'true' || $display === true)
{
echo $msg;
}
// check if we're logging errors
if ($log === 'on' || $log === '1' || $log === 1 || $log === 'true' || $log === true)
{
$result = error_log ($msg);
// check for error while logging
if (!$result)
{
throw new ErrorException ('Attempt to write message to error log failed in ReportError', 0, E_ERROR);
}
}
}
//Begin main function definition
function ErrorsAsExceptions ($level, $msg, $fileName, $lineNumber)
{
// do nothing if error reporting is turned off
if (error_reporting () === 0)
{
return;
}
// be sure received error is supposed to be reported
if (error_reporting () & $level)
{
try
{
// report error to appropriate channels
ReportError ($reportMsg);
}
catch (ErrorException $e)
{
// ignore errors while reporting
}
// go ahead and throw the exception
throw new ErrorException ($msg, 0, $level, $fileName, $lineNumber);
}
}
ErrorException
Introducere
An Error Exception.
Sinopsisul clasei
ErrorException
class ErrorException
extends
Exception
{
/* Properties */
/* Methods */
public __construct
([ string $message
[, int $code
[, int $severity
[, string $filename
[, int $lineno
]]]]] )
/* Inherited methods */
}Proprietăţi
- severity
-
The severity of the exception
Exemple
Example #1 Turn all error messages into ErrorException.
<?php
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");
/* Trigger exception */
strpos();
?>
Exemplul de mai sus va afişa ceva similar cu:
Fatal error: Uncaught exception 'ErrorException' with message 'Wrong parameter count for strpos()' in /home/bjori/tmp/ex.php:8 Stack trace: #0 [internal function]: exception_error_handler(2, 'Wrong parameter...', '/home/bjori/php...', 8, Array) #1 /home/bjori/php/cleandocs/test.php(8): strpos() #2 {main} thrown in /home/bjori/tmp/ex.php on line 8
Cuprins
- ErrorException::__construct — Construct the exception
- ErrorException::getSeverity — Gets the exception severity
ErrorException
makariverslund at gmail dot com
10-Sep-2008 03:08
10-Sep-2008 03:08
troelskn at gmail dot com
29-Jul-2008 01:08
29-Jul-2008 01:08
The following snippet installs an error-handler that turns errors into exceptions. It respects error-reporting level, so that you can still use error-suppression:
<?php
function exceptions_error_handler($severity, $message, $filename, $lineno) {
if (error_reporting() == 0) {
return;
}
if (error_reporting() & $severity) {
throw new ErrorException($message, 0, $severity, $filename, $lineno);
}
}
set_error_handler('exceptions_error_handler');
?>
