# 插件安裝

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

## 插件使用

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

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

舉例插件名稱為打工插件，唯一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插件開發代碼安全基礎及簡單檢測

1、數據過濾

$_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().

2、SQL注入

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

3、跨站腳本

輸出到模板HTML的字符串變量，保證都是經過Char_cv().
杜絕直接在HTML模板中寫類似$_GET、$_POST、$_SERVER等變量

4、文件包含

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