2010-03-06 22 views
2

我想爲我的腳本實現一個簡單的插件系統。我將包含用戶選擇可用的插件的文件。禁用文件include如果它生成錯誤(在php中)

目前,如果任何文件有一些解析錯誤,它會導致完整的東西關閉,直到我入侵數據庫刪除該插件條目。

有沒有簡單的方法來做到這一點? (以某種方式檢查文件的分析錯誤atleast)?

回答

4

您可以向嘗試包含該文件的PHP文件發出HTTP請求,並在最後輸出「OK」。

Check_include.php:

$filename = $_GET["plugin"]; 

$filename = sanitize_filename($filename); // Here you make sure only plugins can be loaded 

include ($filename); 
echo "OK"; 

然後,在你的管理面板也好,叫

file_get_contents("http://mydomain/check_include.php?plugin=my_new_plugin"); 

,看看結果是否包含單詞 「OK」。如果結果沒問題,就沒有致命錯誤,你可以激活插件;否則,甚至可以輸出嘗試包含它時輸出的錯誤消息。

WordPress使用這種涉及IFRAME的變體來檢查新的插件。

注意:發出HTTP請求很貴。在任何情況下,您都不應該在每次插入插件時都這樣做,但在安裝時只能插入一次。使用某種標誌(例如插件名稱前面的下劃線_)來啓用/禁用插件。

+0

好機制... +1 – Marcx 2010-03-06 12:35:14

+0

我不認爲'file_get_contents'調用PHP解析器..? – Aistina 2010-03-06 12:37:47

+0

@Aistina這就是要點:您向本地Web服務器上的PHP腳本發出HTTP請求,並調用分析器的新實例。這樣,如果包含崩潰,它將不會對當前正在運行的腳本產生影響。 – 2010-03-06 12:39:20

0

不。解析錯誤是一個致命錯誤,您無法從中恢復。

+0

有解決方法,看我的答案。 – 2010-03-06 12:30:15