每当你写下一行 echo "hello",实际执行它的程序究竟是什么?许多 Web 开发者写了多年 PHP,却始终没有打开过语言本身的实现代码。据「每日开源」栏目介绍,PHP 官方解释器源码仓库 php/php-src 正属于这类容易被忽略的底层项目。

php-src 是什么?C 语言写成的 PHP 解释器本体

php-src 存放的即是 PHP 语言自身的解释器代码,官方对其的一句话说明为 The PHP Interpreter。它使用 C 语言实现,授权方式为 BSD-3-Clause。目前该仓库累计 Star 超过 4.1 万,Fork 数量逾 8400,在全球编程语言核心代码库中活跃度处于前列。

日常安装的 PHP、各类语法特性以及内置函数,源码都来自这一仓库;大量网站得以运行,背后依赖的也是它。

仓库内部主要包括几块内容:负责拆分源码的词法分析、进行语法解析的组件、承载字节码(opcode)运行的执行引擎,以及被称为 Zend VM 的内存管理机制。PHP 8 所提供的 JIT 编译同样在此实现,使计算密集型业务的执行速度得到明显提升。

从字符串处理、数组操作,到数据库驱动、加密与网络功能,PHP 均内置了丰富的扩展。除此之外,开发者可借助 PIE,或沿用较早的 PECL 体系,为解释器增加新的能力,扩展编写方式较为灵活。

php-src 获4.1万星:PHP解释器如何跑起来

自带回归测试套件,make test 完成并行验证

这套源码中附带规模可观的回归测试套件。完成编译之后,直接执行 make test 即可启动测试;该命令默认会并行调度,利用多核 CPU 加快运行。据原文说法,任何一项改动都有测试作为把关,这也是 PHP 在二十多年里保持稳定版本演进的重要支撑。

若想为 PHP 提交语法特性,或修正一个底层缺陷,这个仓库就是唯一的代码源头,各轮 RFC 讨论和最终合并都围绕它展开。

哪些场景值得翻开源码

据原文列举,以下三类情形适合深入阅读 php-src:从事扩展开发,或者接触 Swoole、FFI 这类偏底层的用法时,阅读源码有助于弄清函数调用与内存流向;需要构建定制版或经过裁剪的 PHP 运行时(例如用于嵌入式设备、特殊平台)时,须从这份代码自行编译;而普通使用 PHP 的开发者,直接在 php.net 获取预编译包会更省事。

Ubuntu 上从零编译 PHP 的步骤

针对希望从源码构建的使用者,原文给出了一条路径:在 Ubuntu 系统中先安装好 autoconf、bison、re2c 等构建工具链,依次运行 ./buildconf && ./configure && make -j4,即可得到可用的 PHP 解释器。代码修改完成以后,不要忘记再执行 make test,确认测试是否全部通过。

小结:php-src 是 PHP 一切语法与函数的源头,凭借 4.1 万以上 Star 的社区规模和覆盖全面的回归测试,长期支撑语言稳定演进。想理解扩展机制、研究底层实现,可以先在 Ubuntu 上按 buildconf→configure→make 的流程跑通一次编译。