拓冰建站拓冰建站
首页 / 资讯中心 / 正文

从源码构建到测试验证:php-src(PHP 解释器)官方仓库完整构建指南

从源码构建到测试验证php-srcPHP 解释器官方仓库完整构建指南【免费下载链接】php-srcThe PHP Interpreter项目地址: https://gitcode.com/GitHub_Trending/ph/php-src本文以 php-src 仓库根目录的 README.md 为主体系统讲解 PHP 解释器的源码获取、构建依赖安装、configure 生成与配置、并行编译、测试套件运行以及安装部署的全流程并结合 buildconf、configure.ac、build/Makefile.global 等仓库源码说明每一步背后真实的构建系统行为帮助开发者完成从拿到 Git 源码到产出可用 php 二进制并跑通测试的完整闭环。PHP 解释器仓库概览PHP 是一种流行的通用脚本语言尤其擅长 Web 开发。当前仓库php-src即 PHP 解释器本体采用 Modified BSD LicenseLICENSESPDX-License-Identifier:BSD-3-Clause分发。从 configure.ac 中的初始化声明可以确认当前仓库的版本定位AC_INIT([PHP],[8.6.0-dev],[https://github.com/php/php-src/issues],[php],[https://www.php.net])即这是 PHP 8.6 的开发线代码。仓库顶层目录的组织方式直接对应解释器的组成目录职责Zend/Zend 虚拟机字节码执行器zend_vm_execute.skl生成 handler、编译器zend_compile.c、zend_language_parser.y、优化器Zend/Optimizer/、垃圾回收zend_gc.c等核心引擎main/运行时核心I/O、流streams、SAPI 抽象层、main.c入口ext/捆绑扩展json、pcre、spl、standard 等每个扩展自带tests/下的.phpt用例sapi/服务器 API 实现cli、fpm、cgi、apache2handler、phpdbg 等tests/引擎级测试套件配套根目录的 run-tests.php 测试驱动win32/Windows 平台的系统调用兼容层官方用户手册PHP manual是最终权威文档入口仓库内则通过 CONTRIBUTING.md、CODING_STANDARDS.md、docs/release-process.md、docs/mailinglist-rules.md 等文件支撑开发协作流程。安装方式选型预编译包 vs 源码构建README 给出了两条路线适用场景不同预编译包/二进制面向快速部署。Windows 从 windows.php.net 获取二进制包解压后*.exe文件即可直接使用其他发行版通过各自包管理器安装。源码构建面向需要定制扩展组合、参与开发调试、或使用 Git 主线的开发者。Windows 下源码构建需另查官方 Wiki 的分步指南本文聚焦 *nix 体系README 亦如此界定。源码构建对工具的最低要求摘自 README最小构建minimal buildautoconf、bison、re2c默认构建default build在上述基础上再加 libxml2、libsqlite3。各发行版的依赖安装命令原文档完整保留Ubuntusudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-devFedorasudo dnf install re2c bison autoconf make ccache libxml2-devel sqlite-develmacOSHomebrewbrew install autoconf bison re2c libiconv libxml2 sqlitemacOSMacPortssudo port install autoconf bison re2c libiconv libxml2 sqlite3第一步buildconf 生成 configure 脚本从 Git 仓库获取的源码不含现成的configure脚本需要先执行./buildconf这一步的真实行为可以直接在 buildconf 脚本中核对区分开发线与发行包脚本读取 configure.ac 中AC_INIT的版本串若含-dev标记当前仓库正是8.6.0-dev则视为开发源码允许直接重新生成对于非 dev 的发行包若configure与main/php_config.h.in已存在则提示已构建完成直接运行./configure只有加-f/--force才会强制重新生成对应 buildconf。校验 autoconf 版本从configure.ac提取AC_PREREQ声明的最低版本当前为AC_PREREQ([2.68])见 configure.ac与本机autoconf --version比对不满足则报错退出buildconf。清理后重建删除aclocal.m4、autom4te.cache、config.cache、configure、main/php_config.h.in等旧产物然后依次调用autoconf与autoheader重新生成configure和main/php_config.h.inbuildconf。可定制的选项与环境变量-f, --force强制在发行包上重新生成 configure 文件--debug展示 Autoconf 发出的告警等价于-WallPHP_AUTOCONF/PHP_AUTOHEADER覆盖 autoconf/autoheader 工具路径例如PHP_AUTOCONF/path/to/autoconf ./buildconf。注意从 PHP.net 下载的正式发行包已内置configure 脚本无需安装 Autoconf、也无需执行 buildconf——这是 buildconf 帮助文本明确说明的适用边界。第二步configure 配置构建生成后进入配置阶段。README 给出两条推荐基线# 开发用启用调试断言与内存安全检查 ./configure --enable-debug # 生产用默认优化构建 ./configure完整选项清单通过./configure --help查看。由于 configure 由 autoconf 从 configure.ac 及ext/、sapi/下各模块的.m4文件生成--help中会列出全部捆绑扩展与 SAPI 的--with-*/--enable-*开关可按需裁剪。第三步make 编译make -j4-jN指定最大并行任务数README 建议让 N 与可用核心数一致Linux 下用nproc查询make -j$(nproc)第四步make test 运行测试套件编译成功后README 说明用make test运行随源码分发的庞大测试套件。其执行链路在构建系统中有明确落点build/Makefile.global 中的测试目标最终调用的是根目录的 run-tests.php$(PHP_EXECUTABLE) -n -c $(top_builddir)/tmp-php.ini $(PHP_TEST_SETTINGS) \ $(top_srcdir)/run-tests.php -n -c $(top_builddir)/tmp-php.ini \ -d extension_dir$(top_builddir)/modules/ $(PHP_TEST_SHARED_EXTENSIONS) $(TESTS)可以看到几个关键点测试使用-n忽略外部 ini配合构建目录内的tmp-php.ini运行并通过extension_dir指向刚编译出的modules/共享扩展目录命令行尾部拼入的$(TESTS)变量正是只测部分目录的实现通道。README 中的两个实用开关1覆盖并行 worker 数。测试默认并行执行最多使用检测到的 10 个逻辑处理器。通过TEST_PHP_ARGS或TESTS传入-jN覆盖# 最多 4 个并发任务 make TEST_PHP_ARGS-j4 test # 串行执行调试时常用 make TEST_PHP_ARGS-j1 test2只测指定目录。利用TESTS变量直接传入测试路径例如只跑语言特性测试make TESTStests/lang/ test仓库中.phpt用例的分布可供组合选择引擎级在 tests/含tests/lang/、tests/classes/、tests/basic/等Zend 引擎专项在 Zend/tests/覆盖 closures、generators、traits、fibers、lazy_objects 等特性扩展级则在各扩展目录内如 ext/json/tests/。更多测试与 QA 细节官方指引至 qa.php.net 站点。第五步make install 安装构建及测试通过后安装make installREADME 提醒是否需要超级用户权限取决于你的用户权限与 configure 时设置的--prefix生产安装通常需sudo而装入用户目录如./configure --prefix$HOME/php-local则可以免 root 完成。扩展体系内置扩展与第三方扩展README 指出扩展为 PHP 提供额外能力并区分三个来源捆绑扩展随源码树内置于 ext/json、pcre、mbstring、sqlite3、zlib、openssl 等默认构建即编译进来可用./configure --help查看完整清单第三方扩展扩展目录可查 PIE Extensions 列表推荐使用 PIEPHP Installer for Extensions安装旧渠道 PECL 已处于弃用状态。仓库根的 EXTENSIONS 文件则是维护者视角的权威台账按 Server API、数据库、文本处理等类别逐一列出每个扩展的主要维护者、维护状态Maintained/Odd Fixes/Orphan/Obsolete与运行状态Working/Not Working是判断某个内置扩展健康度、寻找可认领的孤儿扩展的直接依据。贡献流程从 PR 到合入README 的 Contributing 一节定义了上游协作规则要点如下入口fork 仓库后提 Pull Request讨论在 GitHub 进行必要时经官方开发者邮件列表internalslists.php.net转达。新功能必须先走 RFC并获开发者投票接受修 bug 不需要 RFC。提交信息引用规范GitHub issue 用GH-NNNNNN旧 bugs.php.net 工单用#NNNNNN。README 给出的真实示例Fix GH-7815: php_uname doesnt recognise latest Windows versions Fix #55371: get_magic_quotes_gpc() throws deprecation warning配套文档均为仓库内可读文件CONTRIBUTING.md —— 贡献指南CODING_STANDARDS.md —— 编码规范PHP 以 C11 实现偏好emalloc()/efree()等带安全网的内存 API字符串函数必须利用长度属性避免strlen()、严禁strncat()PHP_*宏用于 PHP 侧、ZEND_*宏用于 Zend 侧等docs/release-process.md —— 发布流程docs/mailinglist-rules.md —— 邮件列表规则内部文档站点 php.github.io/php-src 提供 Internals 文档源在 docs/。完整流程速查综合上述各节一条 *nix 上从源码到可用的标准流水线为# 1. 安装依赖以 Ubuntu 为例 sudo apt install -y pkg-config build-essential autoconf bison re2c libxml2-dev libsqlite3-dev # 2. 生成 configure仅 Git 源码需要 ./buildconf # 3. 配置 ./configure --enable-debug # 或 ./configure 用于生产 # 4. 编译 make -j$(nproc) # 5. 测试 make test # 全量 make TESTStests/lang/ test # 指定目录 make TEST_PHP_ARGS-j1 test # 串行调试 # 6. 安装 make install适用前提与边界本文所有命令与路径以当前仓库PHP 8.6.0-dev 开发线AC_INIT([PHP],[8.6.0-dev])实测内容为准正式发行包已含 configure可跳过buildconf步骤。make test的并行默认值10 个逻辑处理器与 README 描述一致具体 worker 数仍受机器资源影响。Windows 源码构建流程不在本文范围内README 明确指引至官方 Wiki 的分步文档。扩展的可用性受 configure 阶段开关控制最终以php -m输出为准。【免费下载链接】php-srcThe PHP Interpreter项目地址: https://gitcode.com/GitHub_Trending/ph/php-src创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门