如何评估 PHP 中作为字符串传递的公式?
只是想找出正确且更安全的方法来执行作为字符串传递的数学运算。 在我的场景中,它是从图像 EXIF 数据中获取的值。
经过一番研究后,我发现了两种方法。
首先,使用eval
:
function calculator1($str){
eval("\$str = $str;");
return $str;
}
第二,使用create_function
:
function calculator2($str){
$fn = create_function("", "return ({$str});" );
return $fn();
};
这两个示例都需要字符串清理以避免恶意代码执行。 还有其他或更短的方法吗?
Just trying to figure out the proper and safer way to execute mathematical operation passed as string. In my scenario it is values fetched from image EXIF data.
After little research I found two way of doing it.
first, using eval
:
function calculator1($str){
eval("\$str = $str;");
return $str;
}
second, using create_function
:
function calculator2($str){
$fn = create_function("", "return ({$str});" );
return $fn();
};
Both examples require string cleanup to avoid malicious code execution. Is there any other or shorter way of doing so?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这可能会有所帮助。
http://www.phpclasses.org/browse/package/2695.html
下载需要烦人的登录。 我把它复制粘贴在这里给你。
编辑: Jitters 想要支持反向波兰表示法的版本。 让我想起了我的大学时光,当时我有一个惠普计算器:)
This might help.
http://www.phpclasses.org/browse/package/2695.html
Annoying login required to download. I copied an pasted it here for you.
EDIT: Jitters wanted the version that supports reverse polish notation. Reminds me of my college days when I had an HP calculator :)