因为近期在公司的业务上,可能会写一些PHP扩展,然后需要研究PHP内核以及编译(扩展)。
但是windows上关于php7.x源码编译安装的资料比较少,所以就把这两天看到的资料和踩过的坑记录一下。
首先先把官方文档的地址贴出来:
PHP 5.4 - 7.0+版本的(以下称 旧文档),参考这篇文档: https://wiki.php.net/internals/windows/stepbystepbuild
PHP 7.1 及以后的版本(以下称 新文档),请参考这篇文档: https://wiki.php.net/internals/windows/stepbystepbuild_sdk_2
然后我主要做的是7.1的版本,所以参考的是新文档,这两篇文档的结构路子都差不多,看明白其中一个,另一个照葫芦画瓢就可以了。
但是切忌,一开始不要看混淆了,要不然会很痛苦。
原文档是英文,然后我找到一篇翻译的文章:https://blog.csdn.net/xiaoxiong_web/article/details/102701343
然后说一下我目前踩过的坑:
1、下载 二进制工具包和PHP依赖库 踩过的坑(严格来说,这不能叫坑,只能说自己不小心看错了文档)
在下载要求那里,不管新旧版本,都需要三样东西(源代码、二进制工具包和PHP依赖库)。
下载源代码这一块,应该都没有什么问题,下载对应的版本就可以了。
但是后面两个,在新旧版本文档中,操作是不一样的(我就是在这个地方看混淆了,导致在这方面浪费大量的时间)
在旧版本中,下载 二进制工具包和PHP依赖库 都是有明确的 链接,直接点击进去就能找到。
在新版本中,先要去 github 把 二进制工具包 down 下来,然后通过命令行,执行 "phpsdk_deps -u" 命令来自动获取依赖。
2、执行相关脚命令的坑
按照官方文档中的描述,在构建目录以后。
执行一些命令之前(比如:phpsdk_buildtree phpdev ),
你要将 php-sdk/bin/ 目录添加到 环境变量 PATH 中,否则在执行的时候,它可能会提示找不到。
3、 执行 phpsdk_deps -u 下载依赖非常慢
在 PHP 源码目录下 执行 "phpsdk_deps -u" 获取依赖的时候,速度非常慢。执行了2个多小时,才下载了4个包。
为了找出问题,就直接通过浏览器去下载相关包的时候,发现打开VPN会快很多。
然后就顺着 phpsdk_deps.php 这个脚本,找到在 php-sdk/lib/php/libsdk/SDK/FileOps.php:116行的download 方法,整个开发工具依赖包都是通过这个地方下载的。
最后,在 140 行加入ip代理,下载就非常快。
但是需要注意的是,在139行要加一个判断 ,只有下载地址没有 series 关键字目录的时候,才走代理。
因为 所有的要下载的依赖包,是通过这个列表中的文件去决定的。https://windows.php.net/downloads/php-sdk/deps/series/
而phpsdk_deps 命令在获取这个列表里文件内容的时候,如果走代理,它可能会获取不到,从而会抛出一个异常。
============ 后续更新 ============