我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

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

苏南大叔:php内核编译,如何篡改php可执行程序的版本号? - phpsrc控制版本号
php内核编译,如何篡改php可执行程序的版本号?(图5-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码的故事。本文讲述如何修改phpsrc的版本号,编译一个来自未来版本的php内核。测试环境:win10vs2017phpsrc@7.4.28。理论上来说,本文所说的修改方式,在centos下,也是可以的。

事情起源

苏南大叔发现,自己在github上面下载的phpsrc分支7.4.28,编译出来居然出现了php7.4.27-dev的字样,差了一个小版本号,这个可是个大问题。难倒这.27-dev就相当于.28

苏南大叔:php内核编译,如何篡改php可执行程序的版本号? - php7427
php内核编译,如何篡改php可执行程序的版本号?(图5-2)

对比windows.php.net官方提供的源码,可以发现:两者确实存在着一些文件上的差别。居然还能有这种做法?两者源码下载地址:

文件修改

经过苏南大叔多次对比发现:控制版本号变化的地方,主要有以下两个文件:
configure.ac[主要控制编译过程中看得见的版本号显示]:

AC_INIT([PHP],[7.4.27-dev],[https://bugs.php.net],[php],[https://www.php.net])

苏南大叔:php内核编译,如何篡改php可执行程序的版本号? - configure-ac
php内核编译,如何篡改php可执行程序的版本号?(图5-3)

main/php_version.h[控制最终固化在php内核之中的版本号]:

/* automatically generated by configure */
/* edit configure.ac to change version number */
#define PHP_MAJOR_VERSION 7
#define PHP_MINOR_VERSION 4
#define PHP_RELEASE_VERSION 27
#define PHP_EXTRA_VERSION "-dev"
#define PHP_VERSION "7.4.27"
#define PHP_VERSION_ID 70427

当然,这里的注释解释说,不用直接修改这个地方,会自动同configure.ac文件同步。不过,苏南大叔在编译过程中,却没有发现被同步的现象,也许是通过目前尚不知晓的方式同步的。

苏南大叔:php内核编译,如何篡改php可执行程序的版本号? - php-version-h
php内核编译,如何篡改php可执行程序的版本号?(图5-4)

所以,修改这两个文件即可,苏南大叔把它们修改成了9.9.99。编译过程,请参考下面的文章:

最终编译成功后在phpinfo()里面,也可以看到9.9.99的字样,证明php内核版本号篡改成功。

苏南大叔:php内核编译,如何篡改php可执行程序的版本号? - php-9999
php内核编译,如何篡改php可执行程序的版本号?(图5-5)

EXTRA_版本号里面,不支持中文。所以,不要做这些无谓的尝试了,会出现乱码。

参考文献

综述

php内核的版本号,其实也是程序员来定义的。所以,既然有内核的源码了,那么其版本号也是可以修改的。下面的就由你自己来发挥了。

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   phpsrc