1、首先从www.php.net网站上下载php源码,此处以php-5.2.17版本为例,下载后解压至目录。
2、下载安装VC++ 6.0,因为PHP源码是利用6.0版本写的,所以使用这个版本编译不会出现意外,别的版本未测试。
3、把VC++ 6.0安装目录中的 Microsoft Visual Studio\Common\MSDev98\Bin 绝对路径添加到系统环境变量中。
4、进xxx\php-5.2.17\ext目录,复制skeleton文件夹,并重命名为要开发扩展的名字,本例为“zyj”。
5、重命名skeleton.c为zyj.c,skeleton.dsp为zyj.dsp
6、编辑zyj目录中的php_skeleton.h、zyj.c、zyj.dsp这三个文件,替换内容中所有extname为zyj,EXTNAME为ZYJ。(一定要严格区分大小写)
下面就进入到编码阶段:
7、打开php_skeleton.h文件(头文件),找到PHP_FUNCTION(confirm_zyj_compiled);,在 PHP_FUNCTION(confirm_zyj_compiled);,下面编写PHP_FUNCTION(hello_zyj);,声 明一个mb_MessageBox函数,此函数的作用仅是输出js弹出一个alert消息框,用于测试。
8、下面定义函数入口,打开zyj.c文件,找到PHP_FE(confirm_zyj_compiled,NULL) ;,在下面编写 PHP_FE(hello_zyj,NULL),此处注意一下,PHP_FE是定义的一个宏,所以后面不用加引号。
9、在zyj.c最后面编写函数的实体部分:
到这代码书写就完成了,下面开始编译:
10、开始->运行,输入CMD,打开命令行窗口。
至此扩展dll开发完成,下面在php中进行测试:
13、把php_zyj.dll复制到原php目录中的ext文件夹内。
14、打开php.ini文件,添加当前dll的扩展 extension=php_zyj.dll
2、下载安装VC++ 6.0,因为PHP源码是利用6.0版本写的,所以使用这个版本编译不会出现意外,别的版本未测试。
3、把VC++ 6.0安装目录中的 Microsoft Visual Studio\Common\MSDev98\Bin 绝对路径添加到系统环境变量中。
4、进xxx\php-5.2.17\ext目录,复制skeleton文件夹,并重命名为要开发扩展的名字,本例为“zyj”。
5、重命名skeleton.c为zyj.c,skeleton.dsp为zyj.dsp
6、编辑zyj目录中的php_skeleton.h、zyj.c、zyj.dsp这三个文件,替换内容中所有extname为zyj,EXTNAME为ZYJ。(一定要严格区分大小写)
下面就进入到编码阶段:
7、打开php_skeleton.h文件(头文件),找到PHP_FUNCTION(confirm_zyj_compiled);,在 PHP_FUNCTION(confirm_zyj_compiled);,下面编写PHP_FUNCTION(hello_zyj);,声 明一个mb_MessageBox函数,此函数的作用仅是输出js弹出一个alert消息框,用于测试。
8、下面定义函数入口,打开zyj.c文件,找到PHP_FE(confirm_zyj_compiled,NULL) ;,在下面编写 PHP_FE(hello_zyj,NULL),此处注意一下,PHP_FE是定义的一个宏,所以后面不用加引号。
9、在zyj.c最后面编写函数的实体部分:
PHP_FUNCTION(hello_zyj)
{
char *arg = NULL;
int arg_len, len;
char *strg;
if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &arg, &arg_len) == FAILURE) {
return;
}
len = spprintf(&strg, 0, "<script>alert('%s')</script>",arg); //此处正是输入的js代码
RETURN_STRINGL(strg, len, 0);
}
到这代码书写就完成了,下面开始编译:
10、开始->运行,输入CMD,打开命令行窗口。
11、进入zyj的目录,输入 msdev zyj.dsp /MAKE "zyj - Win32 Release_TS",回车编译
至此扩展dll开发完成,下面在php中进行测试:
13、把php_zyj.dll复制到原php目录中的ext文件夹内。
14、打开php.ini文件,添加当前dll的扩展 extension=php_zyj.dll