在PHP中使用eval

时间:2013-07-24 19:50:41

标签: php include external

我有一个文件“xxx.php”,其中包含HTML和PHP代码。当我使用include("xxx.php");时,它很好并且按预期工作。但我正在开发一个我不能使用include的系统,但我可以使用file_get_contents()

问题在于,如果我回显了file_get_contents(“xxx.php”),它会显示整个源代码而无需解释PHP。

所以我做了很多研究,发现我可以使用eval()来运行PHP代码。问题是“xxx.php”有php和HTML代码。我试过了:

eval(file_get_contents("xxx.php"));

但HTML没有显示。 xxx.php的示例:

<?php
echo "HELLO";
?>
<b>HELLO BOLD</b>
<?php
echo "BYE";
?>

问题是eval没有显示任何HELLO!

3 个答案:

答案 0 :(得分:2)

显示代码的

echo file_get_contents()是可以预期的。 f_g_c()不会执行它检索的任何内容。它只是从磁盘中剔除字节并将它们作为字符串返回。这就是你需要eval()

的原因

同样,当您eval()代码时,您应该包含<?php分隔符。 e.g。

php > eval('2+2;'); // no return, no echo, so no output
php > eval('echo 2+2;');
4
php > eval('<?php echo 2+2;');
PHP Parse error:  syntax error, unexpected '<' in php shell code(1) : eval()'d code on line 1
php >

评论跟进:

只需将您提供的任何内容视为eval,就好像它是一个普通的PHP脚本一样,恰好有一个<?php开场标记应用于它:

php > eval('?> foo <?php echo 2+2;');
 foo 4

如果退出PHP模式作为eval块中的第一件事,eval会将该文本视为正常输出,就像一个完整的PHP脚本一样

答案 1 :(得分:2)

在评估之前,先将"?>\n"添加到PHP代码(进入HTML模式):

eval("?>\n" . file_get_contents("xxx.php"));

并修复CMS中的安全问题,这样您就不必采取如此严厉的措施来躲避脚本小子的攻击。<​​/ p>

答案 2 :(得分:0)

对于<insert diety here>的爱,不要这样做....但是你的代码失败了,因为你需要从eval的顶部删除<?php

Eval期望php代码如此假设为<?php?>

您在这里所做的不是保护您的网站,而是让它更容易入侵。