讲述在 Windows 下开发PHP的扩展。
windows环境(我个人的)
1 | windows 8.1 企业版(mac os Boot Camp安装的) |
第一步
解压php-sdk-binary-tools
的二进制包,譬如我解压到我的C:\php-sdk
文件夹中,现在的目录结构如下
1 | C:\php-sdk |
然后,这个是你已经安装完成了visual studio 2012
,打开VS2012 Native Tools Command Prompt
命令行工具
1 | #进入目录 |
如果我们打开bin\phpsdk_buildtree.bat文件就会发现它只创建到VC9,没有VC11,但是我们如果开发php5.5版本,我们需要的是VC11,这时候我们就要把C:\php-sdk\phpdev\vc9
复制一份到C:\php-sdk\phpdev\vc11
,现在的目录结构如下:
1 | C:\php-sdk\phpdev\ |
因为我下载的deps-5.5-vc11-x86.7z
,所以我要解压deps-5.5-vc11-x86.7z
到C:\php-sdk\phpdev\vc11\x86\deps
文件夹下覆盖,里边都是我们需要的库文件和一些必要的工具等等。
然后,将我们下载的php-5.5.20.tar.bz2
解压到C:\php-sdk\phpdev\vc11\x86\php-5.5.20
文件夹中。
编译安装php
回到 VS2012 Native Tools Command Prompt
1 | #进入php源目录文件夹 |
如果你没有安装php,现在这里就帮助到你了,可以先编译安装一下php
1 | configure --disable-all --enable-cli |
然后,你会看到Type 'nmake' to build PHP
,然后编译
1 | nmake |
在C:\php-sdk\phpdev\vc11\x86\php-5.5.20\Release_TS
文件夹下就生成了php.exe文件,环境变量中加入这个路径,好在命令行中能使用php命令。
开发PHP的第一个扩展
假如我们要开发一个widuu()
函数,实现的效果如下
1 | function widuu($string){ |
进入扩展目录,生成扩展文件夹
1 | cd C:\php-sdk\phpdev\vc11\x86\php-5.5.20\ext |
这时候我们在C:\php-sdk\phpdev\vc11\x86\php-5.5.20\ext
就看到了自己的目录widuuweb
,打开widuuweb\php_widuuweb.h
,在
1 | #PHP_MINFO_FUNCTION(widuuweb);下一行写入自己的函数,譬如我定义的是widuu()函数 |
打开php_widuuweb.c
编写函数,在PHP_FUNCTION(confirm_widuuweb_compiled)
下
1 | PHP_FUNCTION(widuu){ |
然后找到PHP_FE(confirm_widuuweb_compiled, NULL)
,在下边注册你的函数
1 | const zend_function_entry widuuweb_functions[] = { |
修改C:\php-sdk\phpdev\vc11\x86\php-5.5.20\ext\widuuweb\config.w32
,去掉
1 | // ARG_ENABLE("widuuweb", "enable widuuweb support", "no"); |
前边的注释,vs命令行,输入cd ..
到php-5.5.20
目录中,输入下面的命令
1 | buildconf --force |
如果,有错误,大家可以打开,目录下configure.js
查看,我这个出现了错误,是configure.js
的4791行,
1 | ARG_ENABLE("widuuweb", "enable widuuweb support", "no"); */ |
多了一个*/
的注释,去掉就可以了,然后再输入
1 | configure --help |
就看到了,有一行
1 | --enable-widuuweb enable widuuweb support |
然后配置
1 | configure --disable-all --enable-cli --enable-widuuweb=shared |
php动态扩展
其中--enable-widuuweb=shared
动态扩展,正好与静态扩展相对。
然后输入nmake,完成后,我们在C:\php-sdk\phpdev\vc11\x86\php-5.5.20\Release_TS
目录下就发现了php_widuuweb.dll
文件,可以放到环境中测试了。
如果你本地没有安装php环境,而是跟我一样只是编译了php,如果测试,我建议静态编译看效果
1 | configure --disable-all --enable-cli --enable-widuuweb=static |
然后,你可以再Release_TS目录下,输入
1 | php -r "echo widuu('widuu');" //输出"your first extension widuu is ok" |