Windows 下开发PHP 扩展笔记

1.环境准备

PHP版本对应要求的VC 环境

PHP 5.5/5.6 --------VC11  VS 2012

PHP 7          --------VC14  VS 2015

以PHP5.5为例:

需要的编译器和环境

Visual Studio 2012 版本

php-sdk-binary-tools-20110915.zip (http://windows.php.net/downloads/php-sdk/下载)

deps-5.5-vc11-x86.7z                      (http://windows.php.net/downloads/php-sdk/下载)

php-5.5.20源代码                              (http://php.net/downloads.php下载,这个版本不定自己选择)

1.解压PHP-sdk-binary-tools的二进制包,譬如我解压到我的C:\php-sdk文件夹中,现在的目录结构如下

C:\php-sdk

    --bin

    --script

    --share

2.这个是你已经安装完成了visual studio 2012,打开VS2012 Native ToolsCommand Prompt命令行工具

#进入目录

cd C:\php-sdk

#设置环境变量C:\php-sdk\bin\

bin\phpsdk_setvars.bat

#创建常用的php-sdk目录

bin\phpsdk_buildtree.bat phpdev

如果我们打开bin\phpsdk_buildtree.bat文件就会发现它只创建到VC9,没有VC11,但是我们如果开发php5.5版本,我们需要的是VC11,这时候我们就要把C:\php-sdk\phpdev\vc9复制一份到C:\php-sdk\phpdev\vc11(VC14同样也这样做)现在的目录结构如下:

C:\php-sdk\phpdev\

                --vc6

                --vc8

                --vc9

                --vc11

                --vc14

3.因为我下载的deps-5.5-vc11-x86.7z,所以我要解压deps-5.5-vc11-x86.7z到C:\php-sdk\phpdev\vc11\x86\deps文件夹下覆盖,里边都是我们需要的库文件和一些必要的工具等等。

4.将我们下载的php-5.5.20.tar.bz2解压到C:\php-sdk\phpdev\vc11\x86\php-5.5.20文件夹中。

5.编译安装php

回到VS2012 Native Tools Command Prompt(区分X86\X64)

#进入php源目录文件夹

cd c:\php-sdk\phpdev\vc11\x86\php-5.5.20

buildconf

#查看带的扩展和编译命令

configure --help

编译安装一下php

configure --disable-all --enable-cli –-disable-zts


注意这一步非常重要,其中–-disable-zts选项是指定是否开启线程安全(Thread Safety),加入此选项安装的PHP版本为非线程安全的,不加此选项默认位线程安全版本,这关系到生成的PHP扩展是否是线程安全的

然后,你会看到Type 'nmake' to build PHP,然后编译

执行nmake

在C:\php-sdk\phpdev\vc11\x86\php-5.5.20\Release_TS文件夹下就生成了php.exe文件,系统环境变量中加入这个路径,好在命令行中能使用php命令。

2.开始开发生成扩展

进入扩展目录,生成扩展文件夹

cd C:\php-sdk\phpdev\vc11\x86\php-5.5.20\ext

#输入phpext_skel_win32.php --extname=扩展名称

php ext_skel_win32.php --extname=example

这时候我们在C:\php-sdk\phpdev\vc11\x86\php-5.5.20\ext就看到了自己的目录

更改

config.m4,

example.c,

php_example.h


7.编译并生成dll

(1)用VS2012打开infosec/infosec.dsp

(2)在BUILD -> Configuration Manager中,将Active Solution Configuration设置成Release_TS

(3)编译工程,BUILD->Build infosec

(4)在*******************\php5.5.12\Release_TS下生成php_infosec.dll

注意:

线程安全TS和非线程安全NTS的开发配置区别(待补充)

(1)         所需要安装的PHP版本

Congfigure完成后Thread Safety这一项:NO 表示NTS  ,YSE表示TS

NTS版本编译完成后的php安装目录,Release目录下的dll文件有php5/php7.dll

TS版本dll文件为php5ts/php7ts.dll

(2)         添加php5ts.lib\php5.lib5.5/5.6/7.0)(默认为php5ts,需手动修改)

若编译报错缺少该文件,将*********\php5.5.12\Release目录下的php5ts.lib\ php5.lib文件拷贝到infosec扩展目录下

VS链接器中的附加依赖项:

生成NTS版文件时,添加php5/php7.lib

生成TS版文件时,添加php5ts/php7ts.lib

infosec文件夹不能移出ext文件夹,否则编译会报缺少php.h

(3)            VS项目预处理器选项

生成NTS版文件时,删除ZTS

生成TS版文件时,添加ZTS=1




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值