1

我有需要评估的逻辑表达式。在使用其参数参数化一些表达式模板之后,这些表达式可能如下所示:

$expr1 = '1 or 0 and not(0 or 0)';
$expr2 = "'editor' == 'editor' and not(0 = 1) and 10 > 5";

所以,我需要处理数字、字符串文字,以及逻辑和代数运算符以及它们之间的圆括号。

使用 PHP eval 时,我还会获得不受欢迎的不安全功能,例如系统函数调用等。

那么,有没有办法限制 PHP eval,或者可能有更好的解决方案?

谢谢!

4

2 回答 2

0

您可以使用标记器来检查表达式是否不包含函数调用。

有关示例,请参见更安全的 eval() 类

于 2012-12-05T12:55:52.620 回答
0

好的,我有另一个解决方案。我发现我可以使用 PHP DOMXPath::evaluate 来评估我的逻辑表达式。所以,我得到了一个可行的解决方案,它没有安全问题。我想我的问题已经解决了:)

于 2012-12-09T19:49:02.890 回答