1
5
Eval不是邪恶的!!!!! 是的,如果你写了错误的代码,它会让你的系统完全崩溃,但是最新的PHP版本可以解析一个无效的表达式,而不会导致整个脚本崩溃。还有很多其他方法可以通过编写错误代码来公开系统。 这只会留下代码注入攻击的可能性——这很容易通过对不是安全字符的所有字符(即0….9,(,),+,-,*,/,^,)进行preg_替换来避免 |
2
12
我对这个问题的标准答案是:
看看 evalMath 关于phpClass的类。它应该做你在这里列出的所有事情。 编辑 回复:很遗憾evalMath不能处理(x>5)这样的事情 将第177-179行更改为
将第184行更改为
321线后 evalMath现在将处理(x>5),(x<5)或(x=5)
第307行遗漏,应修改为:
|
3
1
变成
编写解析器有点困难,但是计算解析后的公式非常容易。 |
4
1
如果在linux机器上运行代码,有一点风险的可能性是使用bc命令(确保在将输入提供给system cmd之前正确地转义)。我不能说使用系统比eval的风险要好得多,所以我在这里期待一些否决票。 |
5
0
即使你通过了eval,你也必须用一些数字来代替x。我需要的策略是传递x的值,然后看看被评估的值是多少。如果大于0,则尝试较小的数字;如果小于0,则递归尝试较大的数字,直到它满足错误边距(<>0.001%)。 |
6
0
取决于。。。 它将接受什么样的复杂性?因为对于常见的数学公式(如您所发布的),我认为编写解析器没有太多问题。主要有问题的问题是将数字舍入并放上正确的括号。 但是,如果方程要接受“高级”输入,比如{[……]},或者X,X,或者更进一步,微分学和大学数学,那么事情可能会变得疯狂。
当然,我强烈建议您为输入创建自己的系统,对其进行验证,并鼓励用户将输入与它联系起来。没什么太复杂的,但足以让你(和其他人)感到舒适和安全,达到你所需要的。 |
7
-1
评估()
取决于您必须做什么,但无论如何,最便宜的方法是对变量使用replace函数,然后使用eval()运行表达式。
PHP类
|
Hipster1206 · 分析bash中有空间的单个字符串参数 6 年前 |
Mr. Boy · 是否可能动态重新加载JS脚本文件? 7 年前 |
R. H. · matlab函数中避免求值 7 年前 |
Cleb · 如何为差分进化添加几个约束? 7 年前 |
Sergey Onishchenko · 将表达式计算为列名 7 年前 |
ARAT · 计算字符串和空单元格 7 年前 |
Doc_failure · 在节点服务器中使用eval是一个坏主意吗? 7 年前 |