开发环境
Windows 10 (可以选用其它版本系统或使用虚拟机)
Windows SDK 6.1 + Visual Studio 2008 (VC9, PHP5.4或更早版本编译工具)
Visual Studio 2012 (VC11, PHP5.5和PHP5.6版本编译工具)
Visual Studio 2015 (VC14, PHP7或更高版本编译工具)
依赖工具
新建目录 php-ext,将所有依赖工具解压到此目录,完成后目录结构如下.
php-ext
--deps-5.5-vc11-x86
--deps
--php-5.5.37-src
--php-5.5.37-src
--php-5.5.37-Win32-VC11-x86
--php-sdk-binary-tools-20110915
准备及检测, 编译PHP 5.5
从系统菜单中打开Developer Command Prompt for VS2012窗口,进入php-ext目录.
设置环境变量,每次重新打开命令窗口必须重新设置环境变量
php-sdk-binary-tools-20110915\bin\phpsdk_setvars.bat
生成目录结构
执行批处理文件php-sdk-binary-tools-20110915\bin\phpsdk_buildtree.bat.
phpsdk_buildtree.bat php-dev
进入php-dev目录,将目录vc9复制并重命名为vc11.
将deps-5.5-vc11-x86目录下的deps目录拷贝到vc11\x86\下覆盖原目录.
将php-5.5.37-src目录下的php-5.5.37-src拷贝到vc11\x86\下.
php-dev
--vc6
--vc8
--vc9
--vc11
--x86
--deps
--php-5.5.37-src
进入php-ext\php-dev\vc11\x86\php-5.5.37-src目录.
检查编译环境是否完整, 生成Makefile文件
buildconf --force
显示帮助
configure --help
编译参数
configure --disable-all --enable-cli
编译
nmake
扩展开发, HelloWorld
在Developer Command Prompt for VS2012窗口(新窗口要重新设置环境变量)作如下操作.
进入php-ext\php-dev\vc11\x86\php-5.5.37-src\ext目录.
..\Release_TS\php ext_skel_win32.php --extname=HelloWorld
进入HelloWorld目录.
打开php_HelloWorld.h文件,在PHP_FUNCTION(confirm_HelloWorld_compiled);行后添加代码.
PHP_FUNCTION(SayHello); //头文件声名函数
打开php_HelloWorld.c文件,在PHP_FUNCTION(confirm_HelloWorld_compiled)函数后添加代码.
//定义函数
PHP_FUNCTION(SayHello){
char *arg_string = NULL;
int arg_len,str_len;
char *string;
if(zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC,"s",&arg_string,&arg_len) == FAILURE){
return;
}
str_len = spprintf(&string,0,"Hello, your first extension %.78s is ok!",arg_string);
RETURN_STRINGL(string,str_len,0);
}
然后在PHP_FE(confirm_HelloWorld_compiled, NULL);行后添加代码.
PHP_FE(SayHello, NULL); //注册函数
打开config.w32文件,将下面一行前面的注释//去掉.
// ARG_ENABLE("HelloWorld", "enable HelloWorld support", "no");
返回php-ext\php-dev\vc11\x86\php-5.5.37-src目录,执行以下命令.
buildconf --force
configure --help
注:如果报错,打开目录下的configure.js文件,找到如下行删掉最的注释符*/.
ARG_ENABLE("HelloWorld", "enable HelloWorld support", "no"); */
如果没有报错或再次执行configure --help后,检查输出是否包括如下内容.
--enable-HelloWorld enable HelloWorld support
重新配置编译参数,--enable-HelloWorld=shared动态扩展.
执行nmake后,会在Release_TS目录下生成php_HelloWorld.dll文件,可以拷贝到实际应用中测试.
configure --disable-all --enable-cli --enable-HelloWorld=shared
nmake
为了方便测试可以采用静态扩展方式进行编译,--enable-HelloWorld=static静态扩展.
configure --disable-all --enable-cli --enable-HelloWorld=static
nmake
静态编译成功后,进入Release_TS目录,执行以下命令测试扩展效果.
php -r "echo SayHello('HelloWorld');"
//输出: Hello, your first extension HelloWorld is ok
本文详细指导如何在Windows环境下利用不同Visual Studio版本(VC9, VC11, VC14)和对应PHP版本(5.4-7)配置和编译PHP扩展,从HelloWorld示例开始,包括环境设置、编译过程和测试。适合PHP开发者深入理解编译过程。
656

被折叠的 条评论
为什么被折叠?



