什么时候(如果有的话)你会用PHP做到这一点?

时间:2011-03-31 20:54:52

标签: php

我一直在浏览Wordpress插件的代码并找到以下内容:

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

我很好奇是否有某些具体情况我不知道这是输出$foo变量的正确方法。这只是插件作者的古怪或者我应该知道的事情吗?我本来会用echo ...

更新:

感谢所有好的反馈。我现在面对的是我没有想到模板场景。具体来说,这发生在WP Super Cache插件中。我想我必须仔细看看是否有必要。我认为在所有PHP已经处理完毕后,Super Cache缓存了Wordpress的html输出......

3 个答案:

答案 0 :(得分:6)

在这种情况下,$foo是一个字符串(可能)可以包含内嵌的PHP代码。因此,要执行此PHP代码,字符串必须为eval'ed。

尽管如此,除了非常范围狭窄的情况之外,使用eval通常是不受欢迎的,因为它可能导致恶意代码的执行。 (即:如果$foo有可能是用户提供的字符串,那么使用eval可能会导致灾难性的后果。)

有关详细信息,请参阅现有的When is eval evil in php?问题/答案。

答案 1 :(得分:2)

那不是输出变量。 $foo最有可能包含一个模板,其中嵌入了其他<?=$code();?>个代码段。

在此eval中使用关闭和打开PHP标记来从内联代码切换回HTML模式。这个eval()或多或少等于:

include("data:,$foo");  // treat $foo string as if it was include script

答案 2 :(得分:-1)

让我再说一遍:c.r.a.p

  

如果eval()是答案,那你几乎就是   当然问错了。

     

Rasmus Lerdorf