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命令。
进入扩展目录,生成扩展文件夹
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.lib(5.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