phpbrew 使用教程 — 在 Linux/macOS 上管理多个 PHP 版本
什么是 phpbrew
phpbrew 是一个 PHP 版本管理工具,允许你在同一台机器上安装、编译、切换多个 PHP 版本。它从源码编译 PHP,因此你可以自由定制扩展和编译参数,非常适合需要测试不同 PHP 版本兼容性的开发者。
与之类似的还有 phpenv(rbenv 风格)和 phpenv,但 phpbrew 功能最全面,支持的 PHP 版本最广。
安装 phpbrew
依赖要求
- Linux 或 macOS
- PHP 7.2+(作为 phpbrew 自身运行时)
- curl、git、gcc/make 等编译工具
- autoconf、automake、libtool 等库(编译 PHP 时需要)
以 Ubuntu/Debian 为例,提前安装编译依赖:
1 | |
方式一:官方安装脚本(推荐)
1 | |
方式二:直接克隆仓库
1 | |
安装完成后,需要在 shell 配置文件中初始化。编辑 ~/.bashrc 或 ~/.zshrc,添加:
1 | |
然后重新加载:
1 | |
运行 phpbrew version 验证安装成功。
初始化
首次使用需要初始化:
1 | |
这会在 $PHPBREW_ROOT(默认为 ~/.phpbrew)下创建必要目录,并在 ~/.phpbrew/init 生成环境变量配置。
查看可用 PHP 版本
1 | |
输出类似:
1 | |
安装 PHP
基本安装
1 | |
这会从 PHP 官网下载源码,configure、make、make install,全程自动化。
指定编译变体(variants)
phpbrew 使用”变体”(variant)机制来组合常用扩展。常用变体:
| 变体 | 说明 |
|---|---|
default |
默认常用扩展集(bcmath、curl、json、opcache、pdo、readline…) |
mb |
mbstring + mbregex,多字节字符串支持 |
dbs |
sqlite + mysql + pgsql,数据库支持 |
fpm |
编译 PHP-FPM(用于配合 Nginx/Apache) |
phpdbg |
编译 phpdbg 调试器 |
opcache |
Zend OPcache |
all |
几乎所有扩展(测试兼容性用,编译慢) |
安装带常用扩展的 PHP:
1 | |
安装极简版(仅 CLI):
1 | |
从已有版本继承变体
1 | |
这样 8.1.0 会自动继承 8.2.0 安装时使用的变体组合。
编译加速
多核机器加 -j 参数并行编译:
1 | |
安装后运行测试
1 | |
常见编译问题处理
缺少库:安装时缺什么库,系统会报错。根据错误信息安装对应 dev 包即可。
Visual C++ 运行库(Windows 下特有):Linux/macOS 无此问题。
并发冲突:某些扩展组合会冲突,如 mcrypt + sodium。通常去掉冲突扩展即可。
已安装版本列表
1 | |
如果还没安装任何版本,会提示:Please install at least one PHP with your preferred version.
切换 PHP 版本
临时切换(仅当前 shell 生效)
1 | |
退出当前 shell 后失效,恢复系统默认或 phpbrew 默认版本。
永久切换(全局默认)
1 | |
会将版本写入 ~/.phpbrew/init,每次新开 shell 自动加载。
关闭 phpbrew,切回系统 PHP
1 | |
查看当前使用中的版本
1 | |
FPM 管理
phpbrew 内置了 php-fpm 的启停管理(前提是编译时加了 +fpm 变体):
1 | |
编辑 php.ini
1 | |
清理构建产物
安装后删除源码目录节省空间(保留已编译的 php 目录):
1 | |
删除已安装的 PHP 版本
1 | |
注意:正在使用中的版本无法被 purge,需要先 phpbrew switch 到其他版本。
批量操作:each
对所有已安装版本执行同一命令:
1 | |
.phpbrewrc:项目级 PHP 版本锁定
在项目根目录放一个 .phpbrewrc 文件,内容如:
1 | |
进入该目录时,phpbrew 会自动切换到指定版本(需要 $PHPBREW_RC_ENABLE=1)。
常见使用场景
场景一:测试项目在不同 PHP 版本的兼容性
1 | |
场景二:本地多项目,不同版本需求
项目 A 需要 PHP 7.4,项目 B 需要 PHP 8.2,通过 .phpbrewrc 在各自目录下自动切换。
场景三:开发时用 phpdbg 调试
1 | |
完整工作流示例
1 | |
常见问题
Q: 编译时提示 “mbregex” 冲突?
A: 去掉 mbregex 变体,单独使用 mbstring 即可。
Q: macOS 上编译失败?
A: 确保安装 Command Line Tools(xcode-select --install)和 Homebrew 依赖库。
Q: 如何让 phpbrew 使用代理?
A: phpbrew install php-8.2.0 --http-proxy=http://127.0.0.1:7890
Q: phpbrew 自身需要 PHP 多少版本?
A: phpbrew 需要 PHP 7.2+ 作为运行时解释器。
卸载 phpbrew
如果不再需要 phpbrew,清理步骤:
1 | |
phpbrew 是本地 PHP 环境管理的利器,尤其适合需要同时维护多个项目、对接不同 PHP 版本依赖的场景。建议安装完 PHP 后顺手 phpbrew switch 设好默认版本,配合 .phpbrewrc 实现项目级自动切换,可以大幅减少版本相关的扯皮时间。