Windows上编译PHP

平时在Windows系统上做PHP开发,都是直接使用WAMP的继承环境。最近需要用到一个PHP扩展,也没找到现成的DLL文件,于是想着自己编译一个。首先,需要安装一个Visual Studio

Visual Studio

上大学的时候,老师教我们用 VC6.0 ,我就在自己电脑上装了个 Visual Studio 2010*,功能全选,占了好十几GB空间,然后就没怎么用了,看来只是想体验一下进度条的优雅。后来用上了 *Sublime ,以为此生足矣,没想到今天还是要求 Visual Studio 2015, 不愧为天下第一IDE。

安装过程略去:
初始化Visual Studio

熟悉的界面:
熟悉的界面

其实这里与Visual Studio IDE没有多大关系,主要是要使用它的控制台:
VC2015 x64 CMD

PHP SDK

PHP For Windows,是一个PHP官方提供Windows系统支持的网站。这里可以找到,已经编译好的、可以在Windows系统上直接运行的PHP,PECL上各种PHP扩展的DLL文件,还有在Windows系统上编译PHP时需要用到的一些工具

在Windows系统上编译PHP,需要准备以下材料:

编译步骤

工作空间

首先,把php-sdk-binary-tools-20110915.zip里面的内容解压到一个文件夹中,例如:D:\php-sdk-binary-tools。然后打开VC2015 x64 CMD,执行以下命令:

1
2
3
4
5
D:
cd D:\php-sdk-binary-tools\
bin\phpsdk_setvars.bat
bin\phpsdk_buildtree.bat phpdev
xcopy /E phpdev\vc9\* phpdev\vc14\

再把deps-7.0-vc14-x64.7z里面的内容解压到D:\php-sdk-binary-tools\phpdev\vc14\x64php-7.0.14.tar.gz里面的内容解压到D:\php-sdk-binary-tools\phpdev\vc14\x64\php-7.0,这时候,目录结构大概如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
D:\php-sdk-binary-tools\
|--bin\
|--phpdev\
| |--vc6\
| |--vc8\
| |--vc9\
| |--vc14\
| |--x64\
| |--deps\
| |--bin\
| |--include\
| |--lib\
| |--php-7.0\
| |--x86\
|--script\
|--share\

开始编译

打开VC2015 x64 CMD,执行以下命令:

1
2
3
4
5
6
7
8
9
D:
cd D:\php-sdk-binary-tools\phpdev\vc14\x64\php-7.0
buildconf

configure --help
configure

nmake
nmake snap

configure --help会输出可用的选项,按需选择。

编译扩展

如果需要编译某个PHP扩展,比如名字叫someone_ext, 可以将其源码放置到D:\php-sdk-binary-tools\phpdev\vc14\x64\php-7.0\ext\someone_ext中,然后执行以下命令:

1
2
3
4
5
D:
cd D:\php-sdk-binary-tools\phpdev\vc14\x64\php-7.0
nmake clean
buildconf --force
configure --help

正常情况下,configure --help的输出中someone_ext这个PHP扩展的相关选项,执行configure带上相关选项即可。只编译someone_ext这个PHP扩展,不重新编译PHP,大概的命令如下:

1
2
configure --disable-all --enable-someone_ext=shared
nmake

后记

一开始提到初衷是想编译一个PHP扩展的,但是上文只字未提,主要是因为,在编译完PHP后,下载扩展的源码时才发现,它不支持Windows系统(只有config.m4,没有config.w32),欲哭无泪。这个扩展名字叫pecl-gearman,万事求不得人,有空自己写一个吧(估计写一个config.w32就行了吧),挽勉自尊。

参考