用于执行PHP代码的字符串变量

Bre*_*ett 0 php string echo

我想要做的是从数据库中提取html和PHP代码,然后执行它.例如,我可能有:

<?php 
  $test = <<<END
    <p> <?php 
    echo time(); 
    ?> </p>
    END;
  echo $test;
?>
Run Code Online (Sandbox Code Playgroud)

我想要的是获得$ test打印

<p> 12:00PM </p>                  //right
Run Code Online (Sandbox Code Playgroud)

而不是印刷:

<p> <?php echo time(); ?> </p>    //wrong
Run Code Online (Sandbox Code Playgroud)

当我使用echo函数时发生.

请不要告诉我如何使用JavaScript或其他工作来做同样的事情.而是坚持这个问题并记住这个例子只是一个展示我问题的例子.实际的代码要复杂得多.

我查看了包含PHP代码的Javascript字符串变量,但没有一个答案可行.

谢谢,

布雷特

Spu*_*ley 6

我强烈建议不要做你要做的事情.这有很多很好的理由.

正如其他人所说,问题的答案就是使用eval().但是,它eval()有几个主要问题.

首先,从对问题的评论中进行跟进,贯穿它的代码执行速度明显慢于常规PHP代码.尽管PHP是一种脚本语言,但它确实具有优化以使运行更快.这些优化都不适用于eval块,因为脚本引擎在实际运行代码之前无法知道代码的外观.

不仅如此,从数据库加载代码也比使用常规include()语句从文件加载代码慢.

其次,eval()是您可以拥有的最大的安全问题之一.一个eval()语句运行任意 PHP代码,它被赋予的,这意味着攻击者可以操纵的代码就可以做任何事情你的服务器上.简而言之,eval()代码中的单个语句可以将轻微的黑客变成灾难性的黑客.

一种不涉及过多改变概念的替代解决方案是将PHP代码保存到文件而不是DB.这将允许您include()在适当的时间简化它,并将消除上面讨论的速度问题.如果您愿意,您仍然可以使用DB来存储它,并使用cron作业或类似工具将其导出到缓存文件,或者您可以直接将其保存到文件中.

但是,这种解决方案不一定能消除安全风险.您仍然可以有效地运行任意代码,这仍然意味着黑客可以通过相对简单的黑客攻击造成大量破坏.

因此,我建议您重新考虑为什么需要允许用户输入的PHP代码输入到您的软件中.