php内核编译,如何篡改php可执行程序的版本号?
发布于 作者:苏南大叔 来源:程序如此灵动~

事情是这样的,苏南大叔拿着github
上面下载到的phpsrc@7.4.28
,写了好几篇文章了。最近才发现:它显示7.4.27
的字样。开始的时候,苏南大叔觉得可能是自己乱实验搞错了环境。但是,事实是什么样的呢?这个事实又说明了什么问题呢?

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文讲述如何修改phpsrc
的版本号,编译一个来自未来版本的php
内核。测试环境:win10
,vs2017
,phpsrc@7.4.28
。理论上来说,本文所说的修改方式,在centos
下,也是可以的。
事情起源
苏南大叔发现,自己在github
上面下载的phpsrc
分支7.4.28
,编译出来居然出现了php7.4.27-dev
的字样,差了一个小版本号,这个可是个大问题。难倒这.27-dev
就相当于.28
?

对比windows.php.net
官方提供的源码,可以发现:两者确实存在着一些文件上的差别。居然还能有这种做法?两者源码下载地址:
- https://github.com/php/php-src/archive/refs/heads/PHP-7.4.28.zip
- https://windows.php.net/downloads/releases/php-7.4.28-src.zip
文件修改
经过苏南大叔多次对比发现:控制版本号变化的地方,主要有以下两个文件:configure.ac
[主要控制编译过程中看得见的版本号显示]:

main/php_version.h
[控制最终固化在php内核之中的版本号]:
当然,这里的注释解释说,不用直接修改这个地方,会自动同configure.ac
文件同步。不过,苏南大叔在编译过程中,却没有发现被同步的现象,也许是通过目前尚不知晓的方式同步的。

所以,修改这两个文件即可,苏南大叔把它们修改成了9.9.99
。编译过程,请参考下面的文章:
最终编译成功后在phpinfo()
里面,也可以看到9.9.99
的字样,证明php
内核版本号篡改成功。

EXTRA_
版本号里面,不支持中文。所以,不要做这些无谓的尝试了,会出现乱码。
参考文献
- https://windows.php.net/download/
- https://newsn.net/say/phpsrc-compile-win.html
- https://newsn.net/say/centos-phpsrc.html
- https://newsn.net/say/phpsrc-compile-centos.html
综述
php
内核的版本号,其实也是程序员来定义的。所以,既然有内核的源码了,那么其版本号也是可以修改的。下面的就由你自己来发挥了。


