Windows中搭建PHP扩展开发环境
首先下载php-sdk,先下载较新的php-sdk-binary-tools-20110915.zip,解压到
f:\php_stdio\php-sdk
目录下。注意,解压后,这个目录下应该有bin和script子目录。
开一个cmd窗口,切换到f:\php_stdio\php-sdk目录下,运行vcvarsall.bat来设置好编译环境变量。
VS2008安装路径\VC\vcvarsall.bat
这里vcvarsall.bat的具体目录要根据你自己的安装位置而定。
接着,进入在cmd窗口里继续运行以下命令:
bin\phpsdk_setvars.bat
bin\phpsdk_buildtree.bat php54dev
这样,在f:\php_stdio\php-sdk目录下又多了一个php54dev目录。
接着继续将deps解压到
f:\php_stdio\php-sdk\php54dev\vc9\x86\
目录下。原来这个目录下的deps目录下的所有子目录均是空目录,解压后,应该复制进很多必要的模块/扩展所需的库文件。
接下来,将PHP-5.4.5源码目录复制一份到
f:\php_stdio\php-sdk\php54dev\vc9\x86\
目录下。进入php源码目录
cd f:\php_stdio\php-sdk\php54dev\vc9\x86\php-5.4.5
运行
buildconf
然后就可以先试着编译php了。最开始,一般编译尽可能少的模块,先让核心能正常编译出来:
configure --disable-all --enable-cli
出现上述执行结果,表示新扩展骨架生成成功,现在打开f:\php_stdio\php-sdk\php54dev\vc9\x86\php-5.4.5\ext可以看到my_fopen文件夹。进入my_fopen可以看到my_fopen.dsp,它就是VS的项目文件。现在可以开发你想要的扩展程序了。
四、编译、使用扩展目前新建的扩展中并未创建任何函数接口,但默认的扩展为我们提供了一个测试的函数接口,默认函数的命名规则是:confirm_[extname]_compiled函数接口:tring confirm_[extname]_compiled(string)
1.用VS打开my_fopen.dsp2.设置项目属性-》配置属性-》C/C++-》代码生成,设置运行库:多线程 DLL (/MD)3.设置项目属性-》配置:切换到Release_TS
4.设置项目属性-》配置属性-》C/C++-》高级,设置编译为:编译为 C 代码 (/TC)5.设置项目属性-》配置属性-》链接器》常规,设置输出文件:Release_TS/php_my_fopen.dll。如果不设置,当编译生成扩展后,找起来会比较麻烦。所以这项设置不是必须的。6.设置项目属性-》配置属性-》链接器》常规,增加附加库目录:F:\php_work\php-5.4.5\dev如果不设置此选项,编译时会报:无法打开输入文件“php5ts.lib”
7.最后按F5,执行编译。会生成php_my_fopen.dll
成功1个,表示dll生成成功。
现在扩展已经编译成功,接下来是在PHP中使用它。8.拷贝php_my_fopen.dll至F:\php_work\php-5.4.5\ext下8.打开F:\php_work\php-5.4.5\php.ini,添加extension=ext/php_my_fopen.dll9.新建F:\php_work\test.php<?php
echo confirm_my_fopen_compiled("test");五、编译新扩展遇到的问题1.fatal error C1902: 程序数据库管理器不匹配;请检查安装
mspdbsrv.exe 或 mspdbcore.dll 丢失或者其版本和 mspdb80.dll 的版本不同,确定这三个文件的相同版本安装在系统里。
在VC安装目录下的\Common7\IDE 目录下拷贝这三个文件到 安装目录下的VC\bin下即可
2. ../main/config.w32.h打开失败
PHP源码进行configure后才会产生config.w32.h
3.无法打开输入文件“php5ts.lib”
设置工程属性页中的C++->高级->编译为改为编译为C代码(/TC),链接器->附加库目录加一项PHP二进制包的dev目录。