2010-03-26 151 views
2

我已經將PHP和HTML代碼存儲在數據庫表中。當我得到這些數據時,我需要回顯HTML並處理PHP。我想我可以使用eval()這個,這是有效的,如果我這樣做eval("echo 'dlsj'; ?> EVALED ");我打印出「dlsjEVALED」。PHP + HTML代碼的PHP評估問題

問題是,當我運行較長的腳本時,出現致命錯誤。諸如:

Parse error: syntax error, unexpected '<' in /home/content.php(18) : eval()'d code on line 1

+3

的問題是'eval'。儘量避免它完全! – poke 2010-03-26 00:09:38

+1

你有一個爆炸性的混亂,不是嗎?我建議你改變你的代碼在你的數據庫是完全PHP(帶一樣,'回聲「

」;',而不是僅僅'

')。不,實際上我建議你根本不要使用'eval'。但這只是我。 – zneak 2010-03-26 00:11:40

+1

爲什麼你會在數據庫中存儲PHP代碼? – 2010-03-26 00:36:04

回答

3

我猜想,你想給eval()的東西,包含開場白<?php標籤。這導致了手頭的錯誤。

+0

正確,我是。但我需要這樣:

text

<?php do_php_stuff(); ?>

更多文字

2010-03-26 00:34:29

+0

對於手頭的問題,一個非常難看的解決方案是將數據庫中的內容寫入臨時文件,然後加載該文件... 這至少可以實現您嘗試獲取的內容。 – 2010-03-26 00:46:03

11

最好的建議 - 從不在你的數據庫中存儲php和html代碼。並避免像瘟疫一樣的eval()。

我真的不能告訴什麼是你的代碼錯誤,因爲你沒有提供足夠的信息。但即使我有一些建議,我也不認爲我可以良心良心地給它。

你應該重新設計你的整個應用程序,以便它不需要在數據庫中存儲這些東西。我無法想象爲什麼這是必要的。

4

您需要EVALED後重新打開PHP模式。 Apparently你必須用<?而不是完整的<?php來做到這一點。

作爲一項規則,應避免使用eval。但規則被打破。有一個線索在When is eval evil in php?,提供了一些較不教條的建議。

取決於你想要做什麼,它可能是適合使用的模板文件,您源,與將隨先期模板存儲在一個局部變量的文本。

至於存儲代碼在數據庫中執行......這並不像Drupal的一些框架正好提供方便的可擴展性,但隨後Drupal是相當徹底沖刷的安全弱點。

另外,如果你正在編寫自修改代碼,那麼你需要使用eval()。不知道是否有人在php中完成了它,但肯定會很有趣。

9

恰到好處德...........

eval('?>' . $content .'<?php'); 
+0

迄今最簡單和最簡單的解決方案 - 如果不是最好的或最有效的。 – caesay 2013-06-17 16:48:55

+0

這應該是一個答案 – arslan 2013-12-11 13:10:59

+0

這是anser。 – hogan 2015-08-17 16:34:52

0
$contents = htmlentities($contents); 
echo html_entity_decode(eval($contents)); 
+2

爲了提高答案的質量,請包括您的帖子如何/爲什麼會解決問題。 – 2012-10-05 21:06:30