From:             xuefer at 21cn dot com
Operating system: *
PHP version:      5CVS-2004-01-12 (dev)
PHP Bug Type:     Performance problem
Bug description:  [suggestion] 2nd argument for set_error_handler to speed up 
performance

Description:
------------
the idea is from the internals mailinglist recently that discuss about 2nd
argument for set_error_handler.
it seems error mask is not going to be used, as i saw no changes in zend.c
function zend_error()
but i'm talking about performance here.


many php scripters use:
$page = (int) @ $_GET['page'];
$id = (int) @ $_GET['id'];
etc etc..
and they use set_error_handler('myErrorHandler');
and 
function myErrorHandler($errstr, $errno, ...)
{
 if (! (error_reporting() & $errno) ) {
   return;
 }
 ..
}

for just every undefined index of page/id
bunch of code in zend_error() is executed and then user defined function
"myErrorHandler", and then error_reporting()

callback set_error_handler(callback handler, [int error_mask]);

error_mask default to NULL(or 0), means "don't check with mask", which is
BackCompat with old scripts

for most scripters, use
set_error_handler('myErrorHandler', E_ALL);
and (error_reporting() & $error_mask) is check BEFORE calling
myErrorHandler


===== change ===
        /* if we don't have a user defined error handler */
        if (!EG(user_error_handler)) {
                zend_error_cb(type, error_filename, error_lineno, format, args);
        } else switch (type) {

==== into ====
        /* if we don't have a user defined error handler */
        if (!EG(user_error_handler)
 || !EG(user_error_handler_error_reporting)
 || !((EG(user_error_handler_error_reporting) & type)) {
                zend_error_cb(type, error_filename, error_lineno, format, args);
        } else switch (type) {


this change require:
http://cvs.php.net/diff.php/ZendEngine2/zend_builtin_functions.c?login=2&r1=1.221&r2=1.222&ty=h

Last Log Message for rev 1.222:
Added error mask to set_error_handler()



-- 
Edit bug report at http://bugs.php.net/?id=26883&edit=1
-- 
Try a CVS snapshot (php4):  http://bugs.php.net/fix.php?id=26883&r=trysnapshot4
Try a CVS snapshot (php5):  http://bugs.php.net/fix.php?id=26883&r=trysnapshot5
Fixed in CVS:               http://bugs.php.net/fix.php?id=26883&r=fixedcvs
Fixed in release:           http://bugs.php.net/fix.php?id=26883&r=alreadyfixed
Need backtrace:             http://bugs.php.net/fix.php?id=26883&r=needtrace
Need Reproduce Script:      http://bugs.php.net/fix.php?id=26883&r=needscript
Try newer version:          http://bugs.php.net/fix.php?id=26883&r=oldversion
Not developer issue:        http://bugs.php.net/fix.php?id=26883&r=support
Expected behavior:          http://bugs.php.net/fix.php?id=26883&r=notwrong
Not enough info:            http://bugs.php.net/fix.php?id=26883&r=notenoughinfo
Submitted twice:            http://bugs.php.net/fix.php?id=26883&r=submittedtwice
register_globals:           http://bugs.php.net/fix.php?id=26883&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=26883&r=php3
Daylight Savings:           http://bugs.php.net/fix.php?id=26883&r=dst
IIS Stability:              http://bugs.php.net/fix.php?id=26883&r=isapi
Install GNU Sed:            http://bugs.php.net/fix.php?id=26883&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=26883&r=float

Reply via email to