When re-writing this example to a form of "create_function", the same
problem occurs:
<?php
$code = ' return 12*A+; '; // Clearly incorrect code :-)
$returnValue = 0;
// Evaluate formula
try {
$temporaryCalculationFunction = @create_function('', $code); // E_ERROR
here
if ($temporaryCalculationFunction === FALSE) {
$returnValue = '#N/A';
} else {
$returnValue = call_user_func_array($temporaryCalculationFunction,
array());
}
} catch (Exception $ex) {
$returnValue = '#N/A';
}
?>
Now I would expect that when I feed "create_function" invalid code
(syntax), the function returns false. It doesn't!
E_ERROR is thrown right away. In my opinion, this should return FALSE,
and only throw an E_ERROR when the created function is executed...
Before telling me to read the manual: I did over a hundred times, on
both eval and create_function: create_function is not documented to
throw E_ERROR right away, instead returning FALSE on error... Exactly
what I was thinking using the above code.
Now let's repeat my question: is there any way to gracefully evaluate
specific code, eventually catch an error and respond to that, without
using parsekit() or launching another process to get this done?
Regards,
Maarten
PS: Eval/create_function is in place in my code, I don't see any other
method to execute (filtered, of course !!!) PHP code that is embedded in
a string.
Maarten Balliauw wrote:
Here's the thing: I'm trying to do some dynamic code compilation within
PHP using eval(). The code I'm trying to compile raises an E_ERROR (Fatal).
Here's a simple example:
<?php
$code = ' $returnValue = 12*A+; '; // Clearly incorrect code :-)
$returnValue = 0;
eval($code);
?>
Now, I'd like to catch the error made by eval:
// ...
try {
eval($code);
} catch (Exception $ex) {
var_dump($ex);
}
// ...
Problem persists: a fatal error occurs.
Using set_error_handler() and set_exception_handler() is not working
either...
Is there any way to gracefully catch this error?
Regards,
Maarten
--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php