|
From: K. O. <web...@my...> - 2003-07-10 07:21:54
|
> Or maybe this: Leave the error handler always ON. If debug mode is on,
> show all errors and warnings (native PHP messages AND explicitly
> 'triggered' messages). If debug mode is off, show only 'triggered'
> messages. If we use trigger_error very sparingly (or E_USER_ERROR for
> errors-to-be-displayed) then the end user will only see a message if
> something goes very wrong (e.g. can't connect to database), which may be
> useful to alert the site administrator. (In a custom error handler you
> can strip out any path info so this is not a security risk.)
I like this idea.. Maybe we can wrap the trigger_error() function with a
custom function/class so that we
can always call the custom trigger error function/method within the codes
which does
not always call the native trigger_error function. This way, the coders
wouldn't need to
think about whether to use the native trigger_error() function in certain
areas of their
codes but just always use the custom one wherever something wrong might
happen.
For example,
class ErrorHandler
{
function ErrorHandler()
{
set_error_handler(array(&$this, 'trigger'));
}
function trigger($errno, $errstr, $errfile, $errline)
{
switch ($errno) {
case E_USER_ERROR:
// do something here
break;
case E_USER_WARNING:
// do something here
break;
case E_USER_NOTICE:
// do something here
break;
default:
// do something here
break;
}
}
// A class that triggers all errors
class ShowAllErrorHandler extends ErrorHandler
{
function notice($msg)
{
trigger_error(E_USER_NOTICE, $msg);
}
function warning($msg)
{
trigger_error(E_USER_WARNING, $msg);
}
function fatal($msg)
{
trigger_error(E_USER_ERROR, $msg);
}
}
// A class that triggers only fatal-level errors
class FatalErrorHandler extends ErrorHandler
{
function notice($msg)
{
// do nothing
}
function warning($msg)
{
// do nothing
}
function fatal($msg)
{
trigger_error(E_USER_ERROR, $msg);
}
}
And at startup, we can use a factory method/class to create one of the error
handler classes
depending on a config setting or the user level (admin, anonymous, etc).
$debug_level = $xoopsUser->isAdmin() ? XOOPS_DEBUG_SHOWALL :
$config['debug_level'];
$error_handler =& ErrorHandler::getInstance($debug_level);
...
$error_handler->notice('A notice error');
...
|