回答
可以使用eval()
功能來運行一個字符串作爲PHP代碼。
將字符串存儲在數據庫中,然後從查詢中獲取並運行eval。
大家在這裏會說,這不是最好的做法。有一個很好的機會,有一個你還沒有想到的更好的解決方案。如果沒有,請確保數據庫中的值不是用戶可編輯的,可能存在一些嚴重問題!
或者,如果您想更安全地使用它,您可以定義可調用的PHP函數,並存儲函數名稱。然後使用call_user_func()
來運行該功能!
這樣做更安全,因爲您明確定義了可運行的功能,但當然不太靈活。
-1爲建議eval() – 2010-07-14 14:55:31
@Marco照顧建議的東西?這裏似乎有相當一致的看法...... – 2010-07-14 14:56:35
@Marco Mariani:爲什麼是-1?它完全符合OP的要求,可能是最簡單的方法。除非你有更好的建議(你呢?),不要模仿。 – FrustratedWithFormsDesigner 2010-07-14 14:57:13
當然可以,您可以使用eval
。但要小心 - eval是邪惡的,如果它包含用戶輸入,惡意用戶可能會接管你的服務器。所以,請善待,不要使用eval!
正如其他人回答,是的,這是可能的;您可以使用eval()
來運行任意PHP代碼。但是,將PHP存儲在數據庫中並不是一個好主意,而且它很少。
也許你可以概述你想要達到什麼目的,爲什麼你覺得在數據庫中存儲PHP是一個很好的解決方案。這樣,如果有人覺得他有更好的解決方案,他可以提出建議。
是的,您可以像存儲其他文本一樣存儲PHP代碼,然後使用eval()
來運行它。
但:你不會得到任何警告/錯誤,如果你的代碼是錯誤的,只有運行。這使得調試您的代碼極其困難。
所以不要這樣做!
真的,我對此很認真。最後,你會有更多的工作。
除此之外,沒有這個數據庫的東西,你的代碼也更容易被他人閱讀和理解。他們不需要知道數據庫中的代碼是什麼,他們可以查找包含的文件。
當然,這是可能的,可以是一個很好的速度提高。我使用cms「contenido」(www.contenido.org),這個練習用於一些可編輯的組件(佈局/模塊/數據類型等)。最後,一篇文章的所有代碼都存儲在一個字段中,並通過一個eval調用來執行。 Contenido並不完美,但是這種做法很好的例子。
缺少版本控制是一個缺點。但使用簡單的方式導出和導入代碼片段並不是一個真正的問題。
正如大家所說,將代碼存儲在數據庫中並使用eval函數是一種不好的做法。我個人的原因是:
我關心調試(有PHP的,讓您調試PHP代碼PHP調試器集成在PHPED我相信它被集成在NetBeans太多的插件。),這將是與eval更困難。
性能問題:
的EVAL除了安全 關注速度EVAL也有 是令人難以置信的速度慢的問題。在我的測試 在PHP 4.3.10其10倍慢,然後 正常代碼和PHP的 5.1 beta1慢28倍。 (來源:http://blog.joshuaeichorn.com/archives/2005/08/01/using-eval-in-php/)
編輯:這裏是我的成績從上面的測試腳本,在我的機器上(PHP 5.3.0):
評估和演示:1000000次了8.2261250019073n
相同的代碼不是評估:1000000次花費0.27089691162109n
評估函數:1000000次花費0.8873131275177n
所以「evaled」代碼比相同代碼的非evaled版本慢30.4倍。
該文章從2005年開始並與Beta版本進行比較。是否有更新的基準測試(不是我認爲eval會有很好的表現,只是想知道是否有更多的最新信息)? – FrustratedWithFormsDesigner 2010-07-14 15:27:40
我在我的機器上運行腳本並添加了我的結果。我沒有找到任何其他更新的eval基準。 – 2010-07-14 16:13:13
- 1. 將PHP代碼寫入文件
- 2. 將當前分數寫入MySQL數據庫的PHP代碼
- 3. 將代碼寫入Python代碼
- 4. 使用PHP代碼寫入PHP文件?
- 5. 如何將PHP代碼寫入由PHP創建的文件?
- 6. 將php代碼寫入.php文件的任何提示?
- 7. Php一次寫入代碼行
- 8. 寫javascript PHP代碼
- 9. 在php中編寫sql代碼並將變量寫入php文件
- 10. 正確的PHP代碼? - 插入到MySQL
- 11. PHP MySQL的插入代碼不工作
- 12. 將PHP代碼重寫爲Javascript
- 13. php和mysql代碼
- 14. 顯示在代碼區寫入的PHP代碼的HTML
- 15. 如何將Html代碼或\ n寫入Gmail的描述中? PHP
- 16. 如何通過php將html代碼(templete)寫入html文件?
- 17. 如何將這段代碼寫入PHP if語句?
- 18. 將ASP.net代碼轉換爲PHP和mysql
- 19. 將PHP代碼從MSSQL遷移到MySQL
- 20. 將css寫入javascript代碼does not work
- 21. 如何將HTML代碼寫入DOM
- 22. 將OutputStream寫入文件的代碼
- 23. 請將此代碼寫入正確嗎?
- 24. 將excel代碼寫入數據庫
- 25. 將JavaScript代碼重新寫入jQuery
- 26. 如何將Java代碼寫入JavaScript
- 27. 將非重複值插入到MySQL中的PHP代碼
- 28. 用於將數據插入MySQL的PHP代碼
- 29. 將SQL代碼插入到PHP/MySQL中的數據庫中
- 30. 將JSP代碼寫入JSP通過JSP寫入
這是一個不好的做法! – Sarfraz 2010-07-14 14:51:02
維持一個噩夢,但如果你感到受虐狂,你可以「評估」你的心靈願望。 – Wrikken 2010-07-14 14:52:31
你爲什麼要這樣做,而不是使用包含的文件?也許有一個特殊的問題,如果你解釋爲什麼你不再需要這個包含的文件,我們可以建議包含文件的替代方法,它也不涉及'eval()'(這個函數打開你的應用程序直到代碼注射問題)。 – FrustratedWithFormsDesigner 2010-07-14 14:55:34