我遇到的问题如下:我有一个MySQL表,其中包含我希望在我的网站上显示的页面内容的详细信息。我的一个页面的内容但是我想包含一些要执行的实际PHP代码,而不仅仅是作为字符串打印。例如:
require_once("Class.php");
Class::Function("Some Text For a Parameter");
我想要在返回sql查询时以某种方式执行此代码,但就目前而言,它只是打印出该文本。有没有办法达到我想要的目的?
提前谢谢你,
此致
斯蒂芬。
答案 0 :(得分:6)
您可以使用eval()
执行此操作,但不应该这样做。
答案 1 :(得分:4)
它们是实现动态元素存储的几种方法:
eval(str):您可以将来自您数据库的任何字符串评估为php代码。如果数据库中存储的内容直接来自用户输入字段,则这不是很明智。你永远不知道将要插入什么,它可能是有害的代码(对服务器的安全性有害)
save / include:您可以将来自数据库的内容保存在临时文件中,并在PHP代码中包含()该文件。如果任何人都可以在您的数据库中存储任何内容,这似乎并不安全
使用具有合理命令空间的模板引擎,例如smarty或mustache。您可以将模板存储在数据库中并执行它们。如果您信任模板语言的实现(例如,在smarty中禁用本机php调用),模板将需要在执行开始之前具有正确的语法
作为一般的经验法则,很难保护这种动态的PHP代码包含,所以它应该被认为是不好的做法。
您应该考虑一个您信任解析器/编译器和执行引擎的DSL(特定于域的语言)。
如果安全性不是问题(例如,因为您的应用程序不会公开),那么将PHP片段存储在数据库中是完全有效的。
我希望这会对你有所帮助
Jerome Wagner
答案 2 :(得分:0)
我通过编写各种bbcode在我的个人CMS中做了一个变种。我附上php来评估[code] [/ code]标签内部,然后在显示时我有一个使用正则表达式的函数来抓取[code]标签内的代码内容来运行。它反过来构建代码,使其关闭文本回显,运行脚本,然后再次启动文本回显。也许解释有点简单,但你明白了。
我绝对会避免评估!