📌 项目地址:php/php-src | ⭐ 41,012 颗星 | 🔧 C | 📜 未标注

这个仓库到底是什么

你在终端里敲的 php 命令,执行时背后跑的就是这份 C 代码。php/php-src 是 PHP 解释器本身的源码仓库,41,012 颗星,用 C 写的。全世界 WordPress、维基百科这类大型网站背后,都有它在工作。

先说清楚一件事:如果你只是想用 PHP 写网站,不需要这个仓库。去 php.net/install 按文档装个发行版就行,Windows 用户直接去 windows.php.net 下载,解压后 exe 就能用。

那谁需要它?两类人:想给 PHP 本身提交代码或修 bug 的内核贡献者,以及想搞清楚引擎内部机制的人。比如你怀疑某个诡异行为不是你代码的问题而是引擎层的,来这翻源码是最快的验证方式。

从源码编译一份 PHP

README 给的流程很直接。以 Ubuntu 为例,先装依赖:

sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev

Fedora 对应的命令是:

sudo dnf install re2c bison autoconf make ccache libxml2-devel sqlite-devel

macOS 用 brew(或 MacPorts,包名基本一样):

brew install autoconf bison re2c libiconv libxml2 sqlite

有个细节值得单独提一句:依赖里有 bison 和 re2c。前者是语法分析器生成器,后者处理词法,这说明 PHP 的解析器不是手写的,是生成出来的。最小构建只要这两个工具加 autoconf;要完整构建还得有 libxml2 和 libsqlite3。

接下来三步:

./buildconf

# 开发用,推荐开 debug
./configure --enable-debug
# 生产用
./configure

make -j4

./buildconf 是从 Git 源码构建特有的步骤,用来生成 configure 脚本。-j4 里的数字建议设成你的 CPU 核心数,用 nproc 可以查。Windows 构建走另一套流程,README 指向了官方 wiki 上的专门教程。

跑测试

PHP 自带一套很全的测试,编译完执行 make test 就能跑。默认并行执行,最多用 10 个逻辑处理器。想改并发数:

make TEST_PHP_ARGS=-j4 test

-j1 则是串行跑。只测某个目录也行:

make TESTS=tests/lang/ test

如果你打算给 PHP 提 PR,这套测试(phpt 格式)就是验收标准,改动必须过测试。更细的测试规范在 qa.php.net。

几个实际信息

许可证是 Modified BSD License(SPDX 标识 BSD-3-Clause),商用没有限制。

项目接入了 OSS-Fuzz 做持续模糊测试,这是一种专门找内存错误和安全漏洞的自动化手段。解释器这种解析不可信输入的软件,这类测试基本是标配,PHP 维护得比较认真。

想参与开发的话,PHP 内核改动走 RFC 流程,语言层面的变更要先在 php.net 的 internals 社区讨论通过,不是直接提 PR 就能进的。建议动手前先读一遍内部的贡献文档。

文档入口都在 php.net/docs。

这篇文章对你有帮助吗?

发表回复