2013-05-03 52 views
0

让我们直接进入它。用于在PHP脚本中动态评估混合内容字符串(html + php)的eval的替代方案

的index.php

<?php 
    ... 
    $url = "www.google.com"; 
    $val = "Is PHP better than Perl?"; 
    $file = file_get_contents("mixedcontent.txt"); 
    print eval("?>" . $file . "<?"); 
    ... 
?> 

mixedcontent.txt

<html> 
... 
    <form action="<?php echo $url; ?>"> 
     <input id="q" type="text" value="<?php echo $val; ?>"/> 
    </form> 
... 
</html> 

两个文件是一样存根和需要是不同的,由于商业软件的局限性它依赖于它。

现在,我意识到eval被许多人视为最后的手段,并且大多数人都提出重新设计,因为eval可能是安全风险。是否有替代使用eval动态评估混合内容(即HTML + PHP)?我能以某种方式使用create_function或call_user_func吗?

谢谢。

更新

基于评价和答案部分使用包括这种特殊类型的例子的建议,我已经修改了代码:

的index.php

index.php

<?php 
    ... 
    $url = "www.google.com"; 
    $val = "Is PHP better than Perl?"; 
    include("mixedcontent.txt"); 
    ... 
?> 

看起来效果很好。非常感谢大家。

+2

在你的代码示例,'include'似乎不够。 – Passerby 2013-05-03 04:11:37

+1

如果文本文件是本地的,'include'应该没问题。如果是外部的,我不确定'include'会因安全限制而起作用。 – Jared 2013-05-03 06:00:16

+0

正如我在下面向Dharmesh所述的那样,我不相信我明白在这里如何使用include。我用include来导入php文件。在这里,我从另一个文件打印出混合内容(html + php)。我将不胜感激上面的例子或类似的使用包括,因为我不明白我可以如何取代eval并使用include打印混合内容。谢谢。 – user717236 2013-05-03 14:40:54

回答

1

我同意贾里德,include是要走的路,但如果你不想使用它,或者如果它不适合你。那么你可以尝试以下,我认为这是更好的选择

http://www.php.net/manual/en/function.eval.php#108091

+0

非常感谢。大家都在暗示包括,但我仍然困惑它如何工作。你能举出一个使用include的例子来说明上面还是类似的例子吗?我一直使用include来导入其他php文件。我看不到如何使用include从php文件内的一个文件中打印出混合内容(html + php)。感谢您的帮助。 – user717236 2013-05-03 14:38:44