Req #30541 [Opn->Wfx]: $php_errormsg isn't set when an error occured in a function called by eval()

From: Date: Fri, 19 Feb 2016 12:14:54 +0000
Subject: Req #30541 [Opn->Wfx]: $php_errormsg isn't set when an error occured in a function called by eval()
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-199336@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=30541&edit=1 ID: 30541 Updated by: nikic@php.net Reported by: php at dush dot student dot utwente dot nl Summary: $php_errormsg isn't set when an error occured in a function called by eval() -Status: Open +Status: Wont fix Type: Feature/Change Request -Package: Feature/Change Request +Package: *General Issues Operating System: linux 2.6 PHP Version: 5.0.2 Block user comment: N Private report: N New Comment: $php_errormsg is indeed a local variable. The global variant is called error_get_last(). Previous Comments: ------------------------------------------------------------------------ [2004-11-07 02:11:33] php at dush dot student dot utwente dot nl and sorry, forgot to notice, I know of set_error_handler() :-) ------------------------------------------------------------------------ [2004-11-06 22:38:02] php at dush dot student dot utwente dot nl <? function bla3() { echo $bla3; var_dump($php_errormsg); } echo $bla2; var_dump($php_errormsg); eval('echo $bla1;'); var_dump($php_errormsg); eval('bla3();'); var_dump($php_errormsg); ?> outputs: Notice: Undefined variable: bla2 in /home/dush/public_html/test.php on line 8 string(25) "Undefined variable: bla2" Notice: Undefined variable: bla1 in /home/dush/public_html/test.php(10) : eval()'d code on line 1 string(25) "Undefined variable: bla1" Notice: Undefined variable: bla3 in /home/dush/public_html/test.php on line 5 string(25) "Undefined variable: bla3" string(25) "Undefined variable: bla1" It's certainly not a bug if it's supposed to be a different $php_errormsg for every scope, but I thought it was a global variable. If I'm not correct, please think of adding something like $global_php_errormsg, as it would be very handy for debugging purposes without having errors on possibly a lot of different positions on a page with error_reporting(E_ALL); ------------------------------------------------------------------------ [2004-11-04 13:43:17] tony2001@php.net Can't find any errors here: <? eval('echo $blah;'); var_dump($php_errormsg); echo $bla; var_dump($php_errormsg); ?> outputs: --- Notice: Undefined variable: blah in /www/index.php(3) : eval()'d code on line 1 string(24) "Undefined variable: blah" Notice: Undefined variable: bla in /www/index.php on line 7 string(23) "Undefined variable: bla" --- Check your code. ------------------------------------------------------------------------ [2004-10-23 16:49:20] php at dush dot student dot utwente dot nl Description: ------------ in debug mode, my script stores every error that occured in the script. when an error occurs in eval(), the error is stored correctly in $php_errormsg. however when the error occured in a function called by eval() the error isn't stored anymore. Reproduce code: --------------- register_tick_function("store_errors", true); function &store_errors($do_tick = true) { GLOBAL $php_errormsg; static $errors = array(); if ($do_tick) { if (isset($php_errormsg) && $php_errormsg != "") { if ($trace = debug_backtrace()) { $func = $trace[1]['function']; if (isset($trace[1]['class'])) $func = $trace[1]['class'].$trace[1]['type'].$func; }else { $func = 'unknown'; } $errors[] = array( 0 => $php_errormsg, 1 => $func ); $php_errormsg = ""; } }else { return $errors; } } /* stupid test function */ function blah() { echo $blah2; echo "error is set here: $php_errormsg<br>"; } eval ('echo $blah1; blah();'); $ar = store_errors(false); while(list($key,$val) = each($ar)) { echo "{$key} => {$val[0]} in {$val[1]}<br>\n"; } Expected result: ---------------- Notice: Undefined variable: blah1 in /home/dush/public_html/core/loader.inc.php(28) : eval()'d code on line 1 Notice: Undefined variable: blah2 in /home/dush/public_html/core/loader.inc.php on line 27 error is set here: Undefined variable: blah2 0 => Undefined variable: blah1 in unknown 1 => Undefined variable: blah2 in blah Actual result: -------------- Notice: Undefined variable: blah1 in /home/dush/public_html/core/loader.inc.php(28) : eval()'d code on line 1 Notice: Undefined variable: blah2 in /home/dush/public_html/core/loader.inc.php on line 27 error is set here: Undefined variable: blah2 0 => Undefined variable: blah1 in unknown ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=30541&edit=1

« previous php.bugs (#199336) next »