开发 php Windows扩展,Windows下开发PHP扩展

本文详细指导如何在Windows环境下利用不同Visual Studio版本(VC9, VC11, VC14)和对应PHP版本(5.4-7)配置和编译PHP扩展,从HelloWorld示例开始,包括环境设置、编译过程和测试。适合PHP开发者深入理解编译过程。

开发环境

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值