phpwind开发文档

# 插件安装

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

## 插件使用

- 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);