我有像这样的评估函数
if(FALSE === @eval($code)) echo 'your code has php errors';
因此,如果代码有synthax错误,它将返回该消息。
问题是,如果在代码中你有类似的东西:
require_once('missing_file.php');
它只会破坏页面,没有我的错误消息:(
有没有解决方法呢?
答案 0 :(得分:2)
好吧,首先我希望$code
来自可靠来源,并且您正在执行用户发送的任意代码。
其次,我看到你可以解决的唯一方法就是将$code
保存到文件中,使用命令行PHP解释器运行它,然后检查退出值。请注意,传递此测试不会导致$code
致命错误,只是发生了脚本的特定执行没有引发任何致命错误;可能还有其他代码路径会触发此类错误。
这是因为一旦eval
触发致命错误,就无法恢复并且脚本死亡。如果存在解析错误,eval
仅返回FALSE
。