在PHP中处理数学方程式
允许用户输入他们喜欢的任何数学方程式(带有一个变量):
x + 5
1 - x/2
(x/3) * (56/13)
这些作为字符串存储在数据库中。检索它们后,我需要用“ x”代替一个数字并检查方程式的值。
我该怎么办?
我当时正在考虑编写一个解析器来解构字符串并将其转换为方程式,但是这听起来很昂贵且存在问题。另一个选择是让它们通过eval(但是如果可以帮助的话,我不是使用eval的忠实粉丝)。
有任何想法吗?
更新:我还需要能够获得类似“(x> 5)”的布尔值。使用evalMath这是不可能的
更新2:我需要一秒钟激发 很多 。我一直在研究php中的eval,但无法获取它返回(5>
4)的布尔值,但是我注意到js会这样做…也许我应该研究node.js …
更新3:在尝试了一下node.js(并使其正常工作)后,我回过头来让eval在PHP中工作,
因此,我将使用eval在用户输入上使用非常核心的过滤器。
回答:
Eval不是邪恶的!
是的,如果编写错误的代码,它可能会完全塞满您的系统-
但是最新的PHP版本可以解析无效的表达式而不会崩溃整个脚本。还有许多其他方法可以通过编写错误的代码来公开系统。
这就留下了代码注入攻击的可能性-通过在每一个非安全字符的preg_replace上执行preg_replace即可轻松避免这种情况(例如0 ....9,(,),+,-,*,/,^, )
以上是 在PHP中处理数学方程式 的全部内容, 来源链接: utcz.com/qa/413411.html