2010-07-14 73 views
0

是否有任何可能性將php代碼寫入mysql,然後在php中使用它,以便處理輸出,而不僅僅是寫入它?將php代碼寫入mysql?

我想使用mysql,而不是包含文件......如果可能的話。

+13

這是一個不好的做法! – Sarfraz 2010-07-14 14:51:02

+0

維持一個噩夢,但如果你感到受虐狂,你可以「評估」你的心靈願望。 – Wrikken 2010-07-14 14:52:31

+3

你爲什麼要這樣做,而不是使用包含的文件?也許有一個特殊的問題,如果你解釋爲什麼你不再需要這個包含的文件,我們可以建議包含文件的替代方法,它也不涉及'eval()'(這個函數打開你的應用程序直到代碼注射問題)。 – FrustratedWithFormsDesigner 2010-07-14 14:55:34

回答

2
+0

'eval'是**惡**! – Sarfraz 2010-07-14 14:53:29

+0

我知道。但他問道。這只是一個答案。 – hsz 2010-07-14 14:54:37

+0

-1建議eval() – 2010-07-14 14:55:14

6

可以使用eval()功能來運行一個字符串作爲PHP代碼。

將字符串存儲在數據庫中,然後從查詢中獲取並運行eval。

大家在這裏會說,這不是最好的做法。有一個很好的機會,有一個你還沒有想到的更好的解決方案。如果沒有,請確保數據庫中的值不是用戶可編輯的,可能存在一些嚴重問題!

或者,如果您想更安全地使用它,您可以定義可調用的PHP函數,並存儲函數名稱。然後使用call_user_func()來運行該功能!

這樣做更安全,因爲您明確定義了可運行的功能,但當然不太靈活。

+0

-1爲建議eval() – 2010-07-14 14:55:31

+0

@Marco照顧建議的東西?這裏似乎有相當一致的看法...... – 2010-07-14 14:56:35

+1

@Marco Mariani:爲什麼是-1?它完全符合OP的要求,可能是最簡單的方法。除非你有更好的建議(你呢?),不要模仿。 – FrustratedWithFormsDesigner 2010-07-14 14:57:13

2

當然可以,您可以使用eval。但要小心 - eval是邪惡的,如果它包含用戶輸入,惡意用戶可能會接管你的服務器。所以,請善待,不要使用eval!

1

正如其他人回答,是的,這是可能的;您可以使用eval()來運行任意PHP代碼。但是,將PHP存儲在數據庫中並不是一個好主意,而且它很少。

也許你可以概述你想要達到什麼目的,爲什麼你覺得在數據庫中存儲PHP是一個很好的解決方案。這樣,如果有人覺得他有更好的解決方案,他可以提出建議。

2

是的,您可以像存儲其他文本一樣存儲PHP代碼,然後使用eval()來運行它。

:你不會得到任何警告/錯誤,如果你的代碼是錯誤的,只有運行。這使得調試您的代碼極其困難

所以不要這樣做!
真的,我對此很認真。最後,你會有更多的工作。

除此之外,沒有這個數據庫的東西,你的代碼也更容易被他人閱讀和理解。他們不需要知道數據庫中的代碼是什麼,他們可以查找包含的文件。

0

當然,這是可能的,可以是一個很好的速度提高。我使用cms「contenido」(www.contenido.org),這個練習用於一些可編輯的組件(佈局/模塊/數據類型等)。最後,一篇文章的所有代碼都存儲在一個字段中,並通過一個eval調用來執行。 Contenido並不完美,但是這種做法很好的例子。

缺少版本控制是一個缺點。但使用簡單的方式導出和導入代碼片段並不是一個真正的問題。

0

正如大家所說,將代碼存儲在數據庫中並使用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倍。

+0

該文章從2005年開始並與Beta版本進行比較。是否有更新的基準測試(不是我認爲eval會有很好的表現,只是想知道是否有更多的最新信息)? – FrustratedWithFormsDesigner 2010-07-14 15:27:40

+0

我在我的機器上運行腳本並添加了我的結果。我沒有找到任何其他更新的eval基準。 – 2010-07-14 16:13:13