phpenv 本身不安装 PHP,需先安装 php-build 插件才能使用 phpenv install 命令;不同 PHP 版本依赖和 configure 参数差异大,须按需指定;多版本共存但仅一个激活,作用域优先级为 shell > local > global。

phpenv 本身不直接安装 PHP,它只负责版本切换和路径调度;真正安装多版本 PHP 需要搭配 php-build 插件 —— 没装这个插件,phpenv install 命令根本不存在。
必须先装 php-build 插件才能用 phpenv install
这是最常卡住的第一步。phpenv 默认只带管理逻辑,不带编译能力。你执行 phpenv install 8.3.13 报错 “command not found”,大概率就是漏了这步:
- 运行
git clone https://github.com/php-build/php-build $(phpenv root)/plugins/php-build - 确保
$(phpenv root)输出是$HOME/.phpenv(默认路径) - 重新加载 shell:
source ~/.bashrc或source ~/.zshrc - 验证:运行
phpenv install --help能输出参数说明才算成功
安装不同 PHP 版本时依赖和参数差异很大
PHP 7.4 和 PHP 8.3 对系统库的要求不一致,硬套同一个 configure 参数会编译失败。比如:
- PHP 7.4 通常需要
libxml2-dev、libssl-dev、zlib1g-dev(Ubuntu/Debian) - PHP 8.3 可能额外要求
libonig-dev(正则引擎)、libsqlite3-dev(SQLite 支持) - 若要启用
opcache或pdo_mysql,得在phpenv install后加--configure-options,例如:phpenv install 8.3.13 --configure-options="--enable-opcache --with-pdo-mysql" - 跳过测试阶段可加
-j$(nproc)加速编译,但首次建议不用,方便定位报错
多个 PHP 版本共存但不能同时激活
phpenv 不是让所有版本“同时运行”,而是通过 shims 动态替换 php 命令的路径。当前生效的只有一个版本,区别在于作用域:
立即学习“PHP免费学习笔记(深入)”;
-
phpenv global 8.3.13:影响整个用户环境(写入~/.phpenv/version) -
phpenv local 7.4.33:在当前目录生成.php-version,进入该目录自动切换 -
phpenv shell 8.0.1:仅当前终端 session 有效(写入$PHPENV_VERSION环境变量) - 优先级顺序是:shell > local > global;三者不冲突,只是覆盖关系
最容易被忽略的是:每次 phpenv install 成功后,新版本不会自动出现在 phpenv versions 列表里 —— 必须等编译完成并安装到 ~/.phpenv/versions/ 下对应子目录才算真正就位。如果看到列表里没新增,先 ls ~/.phpenv/versions/ 确认目录是否存在,再检查编译日志末尾有没有 “Installation complete” 字样。



















