[patch] re-invoking default error handler
| From: | Andrei Zmievski | Date: | Thu, 27 May 2004 15:50:48 +0000 |
| Subject: | [patch] re-invoking default error handler | ||
| Groups: | php.internals | ||
| Request: | Send a blank email to internals+get-10114@lists.php.net to get a copy of this message | ||
Attached is a small patch that can let you do the following. If you set
a custom error handler via set_error_handler() but don't want to
implement all the details of handling every single error level, now you
can simply handle the ones you are interested. Basically, if you return
1 from your error handler, then the PHP default error handler gets
invoked, otherwise nothing happens. So:
function my_notice_handler($type, $str, $file, $line, $context)
{
if ($type == E_NOTICE || $type == E_USER_NOTICE) {
/* do something */
return false;
} else {
/* let PHP default handler do it */
return true;
}
}
It's backwards compatible with previous functionality, i.e. if you don't
return anything, the default handler does not get invoked.
Do you think it's harmless enough to include in PHP 5?
- Andrei
? Zend/cscope.out Index: Zend/zend.c =================================================================== RCS file: /repository/Zend/Attic/zend.c,v retrieving revision 1.162.2.18 diff -u -p -r1.162.2.18 zend.c --- Zend/zend.c 8 Apr 2004 16:51:19 -0000 1.162.2.18 +++ Zend/zend.c 26 May 2004 22:38:47 -0000 @@ -812,6 +812,9 @@ ZEND_API void zend_error(int type, const orig_user_error_handler = EG(user_error_handler); EG(user_error_handler) = NULL; if (call_user_function_ex(CG(function_table), NULL, orig_user_error_handler, &retval, 5, params, 1, NULL TSRMLS_CC)==SUCCESS) { + if (zend_is_true(retval)) { + zend_error_cb(type, error_filename, error_lineno, format, args); + } zval_ptr_dtor(&retval); } else { /* The user error handler failed, use built-in error handler */
? Zend/cscope.out Index: Zend/zend.c =================================================================== RCS file: /repository/Zend/Attic/zend.c,v retrieving revision 1.162.2.18 diff -u -p -r1.162.2.18 zend.c --- Zend/zend.c 8 Apr 2004 16:51:19 -0000 1.162.2.18 +++ Zend/zend.c 26 May 2004 22:38:47 -0000 @@ -812,6 +812,9 @@ ZEND_API void zend_error(int type, const orig_user_error_handler = EG(user_error_handler); EG(user_error_handler) = NULL; if (call_user_function_ex(CG(function_table), NULL, orig_user_error_handler, &retval, 5, params, 1, NULL TSRMLS_CC)==SUCCESS) { + if (zend_is_true(retval)) { + zend_error_cb(type, error_filename, error_lineno, format, args); + } zval_ptr_dtor(&retval); } else { /* The user error handler failed, use built-in error handler */