当前位置: 首页 > 面试题库 >

在PHP中处理数学方程式

邢法
2023-03-14
问题内容

允许用户输入他们喜欢的任何数学方程式(带有一个变量):

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,(,),+,-,*,/,^, )



 类似资料:
  • 问题内容: 我正在为CodeIgniter开发我的REST客户端库,并且正在努力研究如何在PHP中发送PUT和DELETE参数。 在一些地方,我看到人们在使用这些选项: 令人讨厌的是,这似乎无济于事。这是设置PUT参数的正确方法吗? 如果是这样,如何设置DELETE参数? $ this- > option()是我的库的一部分,它只是建立一个CURLOPT_XX常量数组,并在执行建立的cURL请求时

  • Boost.Integer 这个库提供了对整数类型的有用功能,如编译期的最小、最大值常数[3], 基于给定位长的合适大小的类型,静态二进制对数计算等等。还包括从1999年C标准头文件<stdint.h>中的typedef。 [3] std::numeric_limits 仅能以函数方式提供这些值。 Integer 的作者是 Beman Dawes 和 Daryle Walker. Bo

  • 本文向大家介绍PHP函数超时处理方法,包括了PHP函数超时处理方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP函数超时处理方法。分享给大家供大家参考,具体如下: register_shutdown_function Registers the function named by function to be executed when script processing is c

  • 问题内容: 来自Twitter Search API的JSON趋势数据。 使用以下文件来抓取文件: 如何处理来自此对象的数据。作为数组?只需要从[name]值中提取数据即可。 JSON对象包含: 问题答案: 你的意思是这样的吗?

  • Statistical learning Machine learning is a technique with a growing importance, as the size of the datasets experimental sciences are facing is rapidly growing. Problems it tackles range from building

  • 问题内容: 这是异步发送到我的php页面的JSON。本质上,这是一个产品列表,它将插入到我的mySQL数据库中。 我的问题是在PHP中解码JSON。我可以使用``eval’‘函数在js中做到这一点,但是在PHP中,我的努力导致了一系列复杂的爆炸和内爆函数。 我知道php具有内置的json_decode函数,但是在PHP文档中,它们仅显示如何处理数组。 任何建议或帮助都非常感谢 泰勒 问题答案: 如