使用PHP + HTML代码的PHP eval问题

时间:2010-03-26 00:07:26

标签: php eval

我已将PHP和HTML代码存储在数据库表中。当我得到这些数据时,我需要回显HTML并处理PHP。我认为我可以使用eval()来实现这一点,如果我这样做eval("echo 'dlsj'; ?> EVALED ");我会打印出“dlsjEVALED”。

问题是,当我运行更长的脚本时,我遇到致命的错误。比如:

  

解析错误:语法错误,意外'<'在/home/content.php(18)中:第1行的eval()代码

5 个答案:

答案 0 :(得分:11)

最佳建议 - 永远不要在您的数据库中存储php和html代码。并避免像瘟疫那样的eval()。

我无法确定您的代码有什么问题,因为您没有提供足够的信息。但即使我确实有一些建议,我也不认为我能够良心地给予它。

您应该重新设计整个应用程序,这样就不需要在数据库中存储这些内容。我无法想象为什么有必要。

答案 1 :(得分:11)

恰到好处...........

eval('?>' . $content .'<?php');

答案 2 :(得分:5)

您需要在EVALED之后重新打开php模式。 Apparently您必须使用<?而非完整<?php执行此操作。

通常应避免使用eval。但规则被打破了。在When is eval evil in php?有一个主题提供了一些不那么教条的建议。

根据您要执行的操作,可能适合使用您提供的模板文件,文本会在获取模板之前存储在本地变量中。

至于存储要在DB中执行的代码......这确实发生在像Drupal这样的一些框架中,以提供方便的可扩展性,但是Drupal对于安全漏洞进行了彻底的搜索。

此外,如果您正在编写自修改代码,则需要使用eval()。不知道是否有人在php中做过这件事,但肯定会很有趣。

答案 3 :(得分:3)

我猜您正在尝试eval()包含开始<?php标记的内容。这导致了手头的错误。

答案 4 :(得分:0)

$contents = htmlentities($contents);
echo html_entity_decode(eval($contents));