我已将PHP和HTML代码存储在数据库表中。当我得到这些数据时,我需要回显HTML并处理PHP。我认为我可以使用eval()
来实现这一点,如果我这样做eval("echo 'dlsj'; ?> EVALED ");
我会打印出“dlsjEVALED”。
问题是,当我运行更长的脚本时,我遇到致命的错误。比如:
解析错误:语法错误,意外'<'在/home/content.php(18)中:第1行的eval()代码
答案 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));