【发布时间】:2020-08-10 18:12:40
【问题描述】:
我想使用 php eval() 来识别潜在的解析错误。我知道 eval 的危险,但这是一个非常有限的用途,需要事先进行充分验证。
我相信在 php 7 中我们应该能够捕获解析错误,但它不起作用。这是一个例子:
$one = "hello";
$two = " world";
$three = '';
$cmdstr = '$three = $one . $tw;';
try {
$result = eval($cmdstr);
} catch (ParseError $e) {
echo 'error: ' . $e;
}
echo $three;
我试图在此处引起解析错误,看看我是否可以捕获它,但是当我运行它时,错误(未定义的变量 tw)像往常一样出现。它没有被抓住。
任何想法如何从 eval 中捕获解析错误?
【问题讨论】:
-
我建议使用github.com/nikic/PHP-Parser 之类的东西,这将是一种更可控的方式(我认为)。
-
需要指出的一点是,未定义的变量不是解析错误,而是运行时错误。这取决于 PHP 能够以各种奇怪的方式创建变量,在编译时不可能知道变量是否存在。解析错误就像缺少
=-$three $one . $tw;
标签: php