是否可以从数据库中加载执行PHP代码?

时间:2010-01-10 19:35:42

标签: php

如果我在数据库中有PHP代码,我可以在PHP中以某种方式“包含”并执行它吗? 好吧,我确定我可以写出一个包含该内容的文件并且只包含该文件,但也许PHP有类似于eval()的JavaScript?

6 个答案:

答案 0 :(得分:5)

是的,PHP也有eval(),但使用它是非常糟糕的做法。

This question很好地讨论了这些要点,而没有完全谴责它。

大多数情况下,如果出现eval(),则值得仔细研究您正在构建的程序:可能有更好的方法。例如,如果要将数据值填充到存储在数据库中的HTML代码中,某种类型的模板引擎可能是更好的主意。

答案 1 :(得分:1)

请注意,不使用eval()但是从数据库中写出一个文件,包括那些文件将具有完全相同的安全风险......但eval()或{} {}不是{ {1}}问题是:如果有人攻击你的数据库,并且有能力修改PHP代码怎么办?能够让你的服务器运行他们的PHP脚本,并做他们喜欢的事情。

答案 2 :(得分:0)

PHP有eval()。但请,永远不要使用它! :d

答案 3 :(得分:0)

答案 4 :(得分:0)

你可以使用eval函数评估一些代码 - 但它通常被认为是不好的做法,并且使用它有点危险。

(嗯,实际上,它与Javascript中的函数名称相同;-) - 这两种语言都是不好的做法 - 这是巧合;或不)


有时使用的另一种解决方案是:

  • 将您的PHP代码放在数据库中
  • 有时(不是每次)获取它并将其存储到文件中,用作缓存机制
  • include该文件 - 将被执行

我已经看到一些相当古老的CMS以这种方式工作,例如......但请注意,他们主要使用文件作为缓存(不要向DB发出太多请求) - 甚至如果它运作得很好。

答案 5 :(得分:0)

使用文件缓存怎么样?您始终可以将PHP代码临时存储在文件中并包含它。文件生成的简单逻辑,存储在缓存中,包括正确的文件和刷新旧文件(md5校验和+文件缓存时间戳+修改时间戳)。然后只比较两个时间戳,以了解是否需要缓存更新。