第一步先要生成 "main/config.w32.h"
方法原地址:http://www.flyinghail.net/archives/build-mainconfig-w32-h/
准备好PHP源代码,假设解压到 D:\php-src
下载2个必要的包
http://www.php.net/extra/bindlib_w32.zip
http://www.php.net/extra/win32build.zip
把这2个包的内容放一起,例如解压缩到 D:\win32build
请使用 Visual Studio Tools 下的 Visual Studio 命令提示 操作
进入D:\php-src\
执行buildconf.bat
建立一个临时环境变量,执行set path=%path%;D:\win32build\bin
执行 cscript /nologo configure.js –with-php-build=”../win32build” –without-libxml –disable-odbc
如果想要No Thread Safe 模式就在上面的命令最后加上参数 –disable-zts
然后看看是不是main下面多了一个 config.w32.h~
还有一点,config.w32.h 里面 #define PHP_COMPILER_ID 改成和你正在用的 PHP 编译版本相同的编译器ID,例如VC6或者VC9,不然编译出来的扩展没法载入,说实话,这个ID的判断真的很傻很天真….
注:以上过程在PHP5.3.5 + VS2010 下测试通过
第二步建立php helloword 并在编译
方法地址:http://www.cnblogs.com/keyboard/archive/2013/01/24/2874136.html
Windows下开发php扩展文件的方法步骤
一. 首先在电脑上安装vc++6.0,然后将msdev.exe所在的路径添加到环境变量下
二. 下载php的源码包和windows下的二进制包(php-5.3.5-Win32-VC6-x86.zip和php-5.3.5.tar.gz),还有一个文件是config.win32.h
三. 将二进制码包与apache,mysql搭建好php的开发环境
四. 将源码包解压到D盘下,
五.进入到该文件加下的ext文件夹D:\php-5.3.5\ext,该文件夹下就是各种扩展的源码包,其中有一个文件夹是skeleton,
拷贝一份skeleton文件夹,放在该目录下
然后将skeleton-副本 重命名为keyboard(你想扩展的名字,随意),这样在ext目录下就有了一个keyboard文件夹
六.进入keyboard文件夹,可以看到有如下文件
将php_skeleton.h , skeleton.c , skeleton.dsp这三个文件重命名为php_keyboard.h ,keyboard.c ,keyboard.dsp ,然后将这三个文件中的extname全部替换为keyboard,EXTNAME全部替换为KEYBOARD(注意:严格区分大小写)
然后将php5ts.lib(在二进制包下的dev文件夹里)拷贝到该文件加下
七.打开php_keyboard.h文件,添加如下代码
PHP_FUNCTION(hello);
如下图所示
八.打开keyboard.c文件,添加如下代码
PHP_FE(hello,NULL) 如下图所示
PHP_FUNCTION(hello)
{
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, "The string you put in is : %s", arg);
RETURN_STRINGL(strg, len, 0);
}
九.打开cmd,进入到keyboard目录下
十.输入如下指令,如图
如转载没图,图上内容是:>cscript /nologo configure.js --with-php=build="../win32build" --without--libxml --disable-odbc
十一.编译运行,会报如下错误
将config.win32.h拷贝到上级的D:\php-5.3.5\main目录下,继续上述步骤
十一.接着又会报一大堆的错误
此时打开D:\php-5.3.5\main\streams\php_stream_transport.h,
在里面加上这么一句话typedef int socklen_t;
如下图
继续编译运行
十二.好了,现在编译成功了
至此,php_keyboard.dll文件已经生成了,在D:\php-5.3.5\Release_TS文件夹下。然后将它放在php的ext目录下,在
Php.ini中添加extension=php_keyboard.dll,重启apache。
编写如何测试文件test.php
<?php
Echo hello(“hahahahah”);
Phpinfo();
?>
打开浏览器,输入http://localhost/test.php,
即可看到
说明我们写的扩展已经发挥作用了!