我想爲我的腳本實現一個簡單的插件系統。我將包含用戶選擇可用的插件的文件。禁用文件include如果它生成錯誤(在php中)
目前,如果任何文件有一些解析錯誤,它會導致完整的東西關閉,直到我入侵數據庫刪除該插件條目。
有沒有簡單的方法來做到這一點? (以某種方式檢查文件的分析錯誤atleast)?
我想爲我的腳本實現一個簡單的插件系統。我將包含用戶選擇可用的插件的文件。禁用文件include如果它生成錯誤(在php中)
目前,如果任何文件有一些解析錯誤,它會導致完整的東西關閉,直到我入侵數據庫刪除該插件條目。
有沒有簡單的方法來做到這一點? (以某種方式檢查文件的分析錯誤atleast)?
您可以向嘗試包含該文件的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請求很貴。在任何情況下,您都不應該在每次插入插件時都這樣做,但在安裝時只能插入一次。使用某種標誌(例如插件名稱前面的下劃線_
)來啓用/禁用插件。
不。解析錯誤是一個致命錯誤,您無法從中恢復。
有解決方法,看我的答案。 – 2010-03-06 12:30:15
好機制... +1 – Marcx 2010-03-06 12:35:14
我不認爲'file_get_contents'調用PHP解析器..? – Aistina 2010-03-06 12:37:47
@Aistina這就是要點:您向本地Web服務器上的PHP腳本發出HTTP請求,並調用分析器的新實例。這樣,如果包含崩潰,它將不會對當前正在運行的腳本產生影響。 – 2010-03-06 12:39:20