Windows下编译PHP扩展,这3步你得先搞定
在windows下编译php扩展
查看官方文档
在你开始之前
编译器 要求
PHP支持使用Microsoft的Visual C ++编译器进行构建。不支持MinGW和Cygwin。
ICC和clang可以用于实验目的。但是请注意,只有使用Visual C ++才能保证生产质量的二进制文件。
完全支持免费使用的Community VC ++版本,并且可以使用它们。
有关更多信息以及如何获取编译器,请参阅受支持的版本。支持以下VC ++版本:
支持特定的Visual Studio版本意味着仅支持其默认平台工具集。使用非默认平台工具集(例如Visual Studio 2019中的14.16)构建PHP可能有效,但不建议这样做。
Visual C文件名(和PHP_SDK_VS环境变量;请参见下文)中,通常缩写为Visual Studio版本。
在Visual Studio 2019之前,缩写使用方案“ vc#”(例如“ vc14”)。该数字(“#”)是各个平台工具集的主要数字。
Visual Studio 2017的预览版本随平台工具集15.00一起提供,因此使用了“ vc15”。
但是,Visual Studio 2017的第一个GA版本附带了平台工具集14.10(以表示向后兼容性),但内部Visual Studio版本号保持为15.00。
为了避免混淆,保留了“ vc15”。对于Visual Studio 2019内部版本(主版本),“ vc#”最终已更改为“ vs#”(请注意“ s”),该数字现在指定主要的内部Visual Studio版本号。
设置
如果编译PHP 7.0+:
如果编译PHP 7.2+:
如果是master:
可选工具
命令提示符
PHP SDK 2.0.0+提供了启动脚本,这些脚本可以自动设置编译器环境。入门脚本还提供了注入定制设置的功能。要创建自定义的安装脚本,请将您的代码放入phpsdk-local.bat PHP SDK根目录中的文件中。以下变量在PHP SDK Shell中自动可用
每个版本的Visual Studio(或Windows SDK)都提供了一个用于编译的命令提示符环境(可从“开始”菜单启动)。例如,如果您要省略启动脚本用法或要测试Visual Studio的预发行版本,则可以使用它。
下载要求 获取PHP源代码,有两种选择: 获取二进制工具: 获取PHP依赖的库: 设置构建目录
在构建PHP之前,该操作只能执行一次。此处使用的参考二进制SDK目录为c:\php-sdk,可以根据具体情况使用任意位置。因此,我们将该路径C:\php-sdk\phpdev\vc14\x64\php-7.1.0-src用作PHP 7.1.0的Visual C ++ 64位版本的参考路径。
设置PHP SDK 打开命令提示符并输入构建目录:
cd c:\php-sdk
运行启动程序脚本(例如,对于Visual Studio 2015 64位版本),运行phpsdk-vc14-x64.bat运行phpsdk_buildtree批处理脚本,将会创建构建所需的目录结构:
phpsdk_buildtree phpdev
该phpsdk_buildtree脚本将根据当前使用的VC ++版本创建路径,并切换到新创建的目录将PHP源代码提取到,其中:C:\php-sdk\phpdev\vX##\x## 在提取PHP源代码的同一目录中,有一个deps目录。请执行以下任一操作 编译
请注意,PHP SDK脚本当前不支持任何交叉构建。
运行启动程序脚本自动为所需的构建配置设置好环境
c:\php-sdk\phpsdk-vc14-x64.bat
将目录切换到您的PHP源代码的位置,例如
cd C:\php-sdk\phpdev\vc14\x64\php-7.1.0-src
运行
buildconf
查看编译帮助概述:
configure --help
创建您的configure :
configure --disable-all --enable-cli --enable-$remains
编译php 运行
nmake
如果要把PHP构建和扩展打包到压缩包中,请在’nmake’之后运行:
nmake snap
编译后的PHP现在位于“C:\php-sdk\phpdev\vX##\x##\php-source-directory\Release_TS”下。如果您运行“ nmake snap”,则zip文件也将位于此处。如果使用“ –disable-zts”进行编译,则已编译的PHP将位于“C:\php-sdk\phpdev\vX##\x##\php-source-directory\Release”下。可以通过configure --enable-object-out-dir 参数可以设置编译php的位置。 更改后重新编译 清理旧的已编译二进制文件
nmake clean
如果您需要更新“配置”脚本
buildconf --force
创建您的makefile:请参见发布
configure --disable-all --enable-cli --enable-$remains
编译
nmake
构建PECL扩展
许多PECL扩展已经具有预构建的DLL,可以从PECL网站上的扩展页面下载这些DLL。例如,在APCu扩展页面上,发行档案链接旁边有* DLL *链接。他们将您带到一个页面,您可以在其中下载所需的PHP版本和体系结构的已编译扩展。
要构建PECL扩展(例如APCu):
在PECL(APCu)上打开扩展的页面通过以下方式下载扩展源: 创建一个pecl与您的PHP源目录相同级别的目录,例如C:\php-sdk\phpdev\vc14\x64\pecl将扩展源代码提取或克隆到pecl目录 输入您的PHP源目录通过运行以下命令来重建配置脚本:
buildconf
configure –help现在执行应包含启用APCu的选项
--enable-apcu Whether to enable APCu support
配置和构建:
configure --disable-all --enable-cli --enable-apcu
nmake
使用php -m命令测试二进制文件,以确保已加载APCu。此时,已编译的扩展名将位于发行目录中。 陷阱
对于可能的PHP SDK问题,请查阅PHP SDK自述文件
从PHP 7.3开始,可以使用–enable-native-intrinsics开关。
然后,生成的二进制文件将需要具有相应功能集的处理器。
例如,如果设置–enable-native-intrinsics =avx2,请确保目标计算机具有支持AVX2的处理器。
教程至此结束,下面是我的安装过程。
官方下载Visul Studio

下载php源码 环境准备
执行下面命令
phpsdk-vc15-x64.bat
output
[vcvarsall.bat] Environment initialized for: 'x64'
PHP SDK 2.2.1-dev
OS architecture: 64-bit
Build architecture: 64-bit
Visual C++: 14.23.28106.4
PHP-SDK path: C:\Users\xxx\Downloads\PHP2Compile\php-sdk-binary-tools-master
在php-sdk-binary-tools 会生成出phpdev、phpdev\vs16\x64。把下载好的php源码放在些目录中。
运行下面命令,php 会自动下载 需要的依赖包 (php7 以前需要手动下载 php-dsp 文件)
phpsdk_deps -u
output
Configuration: 7.3-vc15-x64-stable
Processing package ICU-64.2-vc15-x64.zip
Processing package apache-2.4.28-vc15-x64.zip
Processing package c-client-2007f-vc15-x64.zip
...
开始编译
切换到php源码目录
buildconf
output
Rebuilding configure.js
Now run 'configure --help'
编译php
configure --disable-all --enable-cli
output
PHP Version: 7.3.11
Saving configure options to config.nice.bat
Checking for cl.exe ... <in default path>
WARNING: Using unknown MSVC version 19.23.28106.4
....
....
| Build type | Release |
| Thread Safety | Yes |
| Compiler | MSVC 19.23.28106.4, untested |
| Architecture | x64 |
| Optimization | PGO disabled |
| Native intrinsics | SSE2 |
## | Static analyzer | disabled |
Type 'nmake' to build PHP
执行完这一步会在main目录下生成config.w32.h文件,编译php扩展会用到这个文件。
运行
nmake
执行这下步会有些慢先去喝口水,休息下。
编译好的php在 php-sdk-binary-tools-master\phpdev\vs16\x64\php-7.3.11-src\x64\Release_TS 目录
运行
php -i
能执行说明成功了
编译扩展
下载扩展 arraylist
buildconf
configure --disable-all --enable-cli --enable-yaf=shared
nmake
–enable-cli-xxx=shared 表示动态链接库,会生成单独的dll文件。否则会编译到php中。
这就编译完了