2013-05-03 21 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