2009-08-22 38 views
0

警告:非常过时的问题与一个可怕的想法。存储代码,无论是PHP,JavaScript还是HTML,都不是一个好主意。在此仅留作文档用途如何从数据库执行php?

我有点尴尬的问题。

通常情况下,将东西放在数据库中时,将以原样保存。 因此,如果保存的东西是:

<?php echo "hi!"; ?> 

这将只是作为输出“你好!”当被调用时。
但是,在我的情况下,我将纯文本保存到数据库中。我没有进行任何验证来检查这些代码,并且我已经关闭了魔术引号以防止这些内容被转义。

当从数据库中获取数据并将数据放入页面(如果完全加载,所以PHP应该执行时,页面之前的课程),这在源代码中显示为?php标记,因此不可见(至少在Safari上),因为它是一个不知名的输出标签。数据块由一种'Joomla-ish'模板代码组成。 HTML标签,样式(CSS),JavaScript块和PHP都可以在那里。像CSS,JS等东西的作品,但服务器端代码不。

任何想法如何让这个工作或为什么它不工作?数据库位于mySQL和MyISAM中作为存储引擎。我保存的领域是一个长文。我使用的是php5(在w3c网站上声明使用魔术引号并不是很好的做法,因为它会在php6中被删除,因为除了解决一些问题外,它会带来很多安全风险)。

我试过使用eval(),但有一个小问题。 eval()函数asumes这是php,但通常不会。它将主要是HTML和一些PHP块。

回答

6

我建议不要在数据库中存储PHP。 数据库用于数据,而不是代码。

如果您需要有条件运行的代码,请将其放入.php文件中并使用include()执行它。

如果你需要动态内容,你可以把它放在数据库中,然后就是echo吧。无需使用eval()

不要忘记用htmlentities()来逃避输出。

+1

我在想那件事。 – Samuel 2009-08-22 19:56:30

+2

确实:**警告团队!极度危险!**。将PHP模板代码放在数据库中是非常不寻常的,除非你有一个出人意料的理由来做这件事,并且非常小心你的字符串转义,这很有可能最终导致服务器被入侵。 – bobince 2009-08-22 20:31:49

1

如果我正确理解您的问题,您可能需要从数据库中评估()内容。有关更多详细信息,请参见eval documentation

如果代码是“用户创建的”,则可能需要将精简的PHP执行环境设置为沙箱。

+0

我应该怎么做呢?并将PHP的exec()命令适合这个或是唯一适用的eval函数? – xaddict 2009-08-22 18:53:47

+0

$ output = eval($ txt_from_db_query);将解析并运行数据库文本缓冲区中的PHP返回扩展的位 – 2009-08-22 19:20:26

1

,你不能只是让

echo $phpcode; 

你需要使用eval。但请注意。你可能有很多安全问题。

1

eval语句将执行您在字符串中传递的PHP代码。但是,您需要注意谁可以访问数据库中的数据,因为在运行之前很难检查代码的安全性。