##### 本欄目相關鏈接

- 論壇系統的搬遷和轉移
- 界面風格與模板定制
- 使用PHPWind分論壇
- PHPWind插件相關
- PHPWind靜態化的簡介
- PHPwind轉換

### 插件安裝流程︰

下述的步驟只是按照通用流程進行說明，如果與插件安裝說明中的描述不符，請以插件提供者的描述為準。

- 下載所需的插件
  PHPWind百款插件，集大家所愛，請下載適合您當前論壇情況的插件，並仔細閱讀插件安裝說明。
- 按插件安裝說明修改程序、模板、上傳插件
  插件上傳非常簡單，將插件目錄上傳到論壇根目錄下的hack文件夾下即可。
- 安裝插件
  上傳完畢後，進入論壇後台->風格插件->插件中心,在"未安裝插件"欄目下找到該插件，選擇安裝。
- 插件管理
  進入論壇後台->風格插件->插件中心，在"已安裝插件"欄目下找到該插件，開啟插件、設置插件參數，開始使用該插件。

### 插件目錄結構，以及文件名約定規則

舉例插件名稱為打工插件，唯一ID為work，那麼插件的文件夾名稱應該跟唯一ID保持一致，其所有文件應該存放在 hack/work目錄下，以下內容將以此插件為例說明。

1)插件根目錄 hack/work目錄
存放插件主要文件，包括在根目錄下的文件內容如下︰

- index.php 插件前台主文件，如果不存在此文件，插件則不顯示前台界面。
- admin.php 插件後台主文件，如果不存在此文件，插件則無後台管理功能。
- sql.txt 插件安裝所需要執行的SQL語句，禁止Drop PHPWind自身數據以及刪除已有數據等危險操作。如果不需要執行SQL語句變動數據庫，可以不存在此文件。
- readme.txt 插件使用說明，來提供給用戶相關說明文檔。
- 倘若無前台顯示/後台設置等，可以沒有相應的文件，如果有相應功能，則文件命名必須按照指定規則。

2)圖片目錄 hack/work/image
此目錄存放插件文件中所使用到的圖片文件，強烈要求在文件中使用$hkimg變量來指定此目錄，這樣指定目錄將會讓文件有極大的靈活性。

3)插件包含文件 hack/work/require
倘若插件比較大，可以把一些常用的函數寫成文件放入到require文件夾。

4)插件模板文件夾 hack/work/template
不同于5.0之前的版本，所有模板均放置到template下，前台放置于template/wind 後台放置于template/admin，而現有的插件體系規定所有的插件模板均放置在這一個目錄下，不再需要分別放到兩個文件夾中。

5)緩存文件
出于文件777屬性考慮，以及緩存文件的統一部署，建議插件開發者將緩存文件存儲為data/bbscache 目錄下（此目錄已經可寫，否則無法使用）， 同時，出于進一步的為插件使用者著想，建議緩存文件使用程序生成，來避免第一次使用插件時，因為沒有緩存文件或者緩存文件不可寫而導致的錯誤--我們必須 考慮到，部分用戶不熟悉電腦操作，並不了解如何設置文件777屬性，所以建議並不附帶默認的緩存文件，而默認的緩存文件，在插件使用者第一次使用的時候， 自動生成到data/bbscache目錄下，這樣將避免插件安裝中頻繁出現的777問題。[備注提示︰一般附帶緩存的文件，可內置某些默認值，然後插件 完成安裝之後，使用者應該進行一次設置提交來保存它所需要的設置，在這個時候設置再生成緩存文件到data/bbscache目錄下一個緩存文件，能夠有 效的避免需要設置777的問題]

### PHPWind插件開發代碼安全基礎及簡單檢測

數據過濾
$_GET、$_POST的變量通過InitGP() or GetGP() 來獲取。確認為數值為變量要(int)　or　(float)強制轉換，如︰$tid = (int)GetGP('tid'); 。字符串變量要經過Char_cv()過濾，如︰$subject = Char_cv($GetGP('subject'));。在PW７中，InitGP() 默認開啟Char_cv()過濾，因此不能版本間的兼容問題得處理好，避免有效內容出錯。
$_SERVER變量，在PHPWind7中通過全局變量$pwServer或GetServer()　來讀取，而在其他版本中，對單獨用到的，必須經過addslashes() or　Char_cv().

SQL注入
SQL語句中的變量，在PHPWind7中，保證最後經過過濾函數pwEscape()　、　pwImplode() 、pwSqlSingle()　、　pwSqlMulti()　。如︰$tbid = $db->get_value('SELECT ptable FROM pw_threads WHERE tid='.pwEscape($tid,false));
而在其他版本，SQL語句中的變量兩邊必需加個單引號，同時，變量必需是經過了轉義的。特別注意從數據庫中讀取出來的值再次寫入數據庫時，得進行轉義，避免二次注入。

文件包含
Include() or require()　文件路徑包含變量時，必需經過Pcv()的過濾，如include_once Pcv(D_P.'data/bbscache/'.$filename);

跨站腳本
輸出到模板HTML的字符串變量，保證都是經過Char_cv().
杜絕直接在HTML模板中寫類似$_GET、$_POST、$_SERVER等變量
以上僅為簡單的概述下，有興趣參與插件開發的可以到FAQ平台開一些資料，或者到官方板塊 插件開發 參與學習研究