假设我在php中执行此操作:
eval("\$answer=1--1;");
表达式1--1将导致eval中的语法错误,我的问题是如何检测错误并优雅地处理它?即:在eval中捕获错误,然后打印出有用的消息。现在,它只是吐出“解析错误:语法错误,意外的T_DEC”。不幸的是,php手册指出用set_error_handler()函数捕获解析错误是不可能的。
这是一个简单的学校作业,他们建议使用“eval()”。 由于任务很简单,也许没有必要担心这些罕见的情况。
答案 0 :(得分:1)
echo 'd41d8cd98f00b204e9800998ecf8427e';
。或者,使用Parsekit。
答案 1 :(得分:1)
将数学方程式使用eval没有一个理由 因为周围有数以千计的数学解析器。安全可维护。
答案 2 :(得分:0)
将@
符号预先设置为eval
以抑制错误输出,然后选中error_get_last()
:
$test = @eval($str);
if (error_get_last())
var_dump(error_get_last());
然后,针对列表解析错误消息中引用的PHP令牌(“消息”值或您案例中的T_DEC
):http://php.net/manual/en/tokens.php
但是,某些解析错误可能会使整个脚本失败,例如调用未定义的函数。并且,因为您抑制了错误输出,故障不会出现在您的日志中。基本上:避免使用eval
以外的其他任何东西,而不是一个有趣的玩具来打发时间。
编辑:我的假设是"\$answer=1--1;"
并不是你想要检查的值(太明显了),而只是你可能传递给eval的字符串的测试例子。如果是真的,你应该在那里修复它。但是如果你想在eval中传递和检查任何字符串,那么上面的内容将有所帮助。