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

Reply via email to