您所在的位置：PHPWind 安装说明 > 高级应用 > 插件相关

- 简介
- 安装指南
  - 系统环境说明
  - 程序安装流程
  - 文件及目录结构
  - 程序升级流程
  - 版本说明
  - 安装集成包介绍
- 功能使用
- 常见问题
- 高级应用
  - 界面风格与模板定制
  - 使用PHPWind分论坛
  - 插件相关
  - 论坛系统的搬迁和转移
  - 转换工具
- SEO技巧
  - 搜索引擎优化
  - 网页标题收录
  - 伪静态的使用

### 插件安装流程

下述的步骤只是按照通用流程进行说明，如果与插件安装说明中的描述不符，请以插件提供者的描述为准。

- 下载所需的插件
  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语句中的变量两边必需加个单引号，同时，变量必需是经过了转义的。特别注意从数据库中读取出来的值再次写入数据库时，得进行转义，避免二次注入。

跨站脚本
输出到模板HTML的字符串变量，保证都是经过Char_cv().
杜绝直接在HTML模板中写类似$_GET、$_POST、$_SERVER等变量

文件包含
Include() or require()　文件路径包含变量时，必需经过Pcv()的过滤，如include_once Pcv(D_P.'data/bbscache/'.$filename);