环境配置最好还是看官方的文档:
https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2
1. 所需工具
- Visual Studio 2019 Community https://visualstudio.microsoft.com/
- php源码 https://github.com/php/php-src/releases
- php sdk编译工具,最好用2.1.10,小于此版本的没有尝试成功 https://github.com/microsoft/php-sdk-binary-tools/releases
- 源码调试工具Visual Studio Code https://code.visualstudio.com/download
2. 安装Visual Studio
在正式编译源码之前需要安装Visual C++,但是这个比较奇怪,我没整明白,一开始下载了Visual C++ Redistributable for Visual Studio 2015
,但是安装了之后,进入php_sdk_binary_tools
目录,执行phpsdk-vc15-64.bat
,结果还是报错:
1 | Could not determine 'vc15' directory |
官方文档中给的建议是安装Visual Studio
:
根据官方提示,到官网https://visualstudio.microsoft.com/下载`Visual Studio 2019 Community版本,安装时选择
使用C++的桌面开发`,详细安装项保持默认就好。
3. 编译前依赖准备
解压下载好的php_sdk_binary_tools
,进入目录后,会发现有四个文件:
1 | phpsdk-vc14-x64.bat |
因为我下载的是Visutal Studio 2019 x64
,所以对应的是phpsdk-vc15-x64.bat
,在Powershell或是cmd中运行该bat文件,看到下面的提示就表示成功了,这里我使用的php sdk版本是2.1.10
,低于此版本的我在后面执行phpsdk_deps --update --branch master
时总会报错。此时可以看到powershell窗口变成了$
符号:
运行创建目录的命令
1 | phpsdk_buildtree php7 |
将下载的php源码也解压到目录php7/vc15/x64
下,然后进入源码目录,我这里是php-src-php-7.2.25
,执行命令下载php7编译所需要的依赖组件:
1 | phpsdk_deps --update --branch master |
这里真的很坑,根据我自己的测试,这个真的很难下载,不知道是不是因为是在晚上,网络不太好,挂了代理也不行,完全下载不下来。
所以可以直接到 https://windows.php.net/downloads/php-sdk/deps 下载所需的依赖组件,注意选择和自己的vc版本适配的依赖,比如我安装的Visual Studio 2019对应的vc版本是vc15
,我的系统是x64
,所以就要下载https://windows.php.net/downloads/php-sdk/deps/vc15/x64/ 中的所有依赖包。
里面有很多依赖,有53个zip文件包
将它们全部都下载下来,然后解压到你的php-sdk-binary-tools-php-sdk-2.1.10\php7\vc15\x64\deps
文件夹下,这个文件夹下本来有三个文件夹,分别是lib
,bin
和include
,这个不用管。
下载并解压完成后,进入源码所在目录,执行
1 | buildconf |
该命令会释放configure.bat
和configure.js
两个文件,返回下面两行就说明没问题:
1 | Rebuilding configure.js |
按照提示,继续执行:
1 | configure --help |
在shell中执行下面的命令来配置相关的php编译选项
1 | configure --disable-all --enable-cli --enable-debug --enable-phar |
如果还有别的需求,可以查看configur --help
中的选项。
成功执行后就是这样的
然后执行nmake
命令进行编译就可以了:
1 | nmake |
看到SAPI sapi\cli build complete
,说明编译成功。
编译成功后,进入x64\Debug_TS
目录,编译好的可执行php.exe
文件就在该文件夹下,对我来说该文件夹就是``,执行
1 | php -v |
编译到这一步就完成了。
4. 配置调试环境
因为Visual Studio 2019这个软件太大了,运行占用内存也比较大,仅仅跟踪调试源码根本不需要这么多功能,所以可以用Visual Studio Code
这个轻量级的IDE来替代。
打开Visual Studio Code,安装调试源码所需要的C/C++
扩展:
然后打开源码所在目录,也就是php7\vc15\x64
目录下的php-src-php-7.2.25
,File -> Open Folder
,然后修改配置文件,Run -> Add Configuration
:
在弹出的窗口里选择C++(Windows)
:
会自动跳出launch.json
,像下面这张图一样进行配置:
这里必须要修改的是三个地方,program
,args
和cwd
:
1 | { |
可以测试一下,新建一个php文件,命名为pathinfo.php
:
1 |
|
看看能不能跟踪到pathinfo
函数,先全局搜索一下该函数(右边有个放大镜),搜索PHP_FUNCTION(pathinfo)
,在string.c
文件中,我们在该处打个断点:
然后Run -> Start Debugging
,不出意外,可以看到停在了断点处。
接下来就可以愉快的调试了,不枉我捣鼓一晚上,其中最费时的就是编译前下载依赖那一块,最好就是直接去下载,用命令下载真的超级慢…
5. 参考
如果还有其他的问题,可以参考这两篇文章: