不能。phpenv-installer脚本不会自动覆盖更新,因它不执行git pull;正确方式是进入$PHPENV_ROOT目录手动git pull,或重装;php-build插件也需单独进入其目录执行git pull更新。

phpenv install脚本能直接覆盖更新吗
不能。运行 curl -L http://git.io/phpenv-installer | bash 看似是“重装”,但实际行为取决于当前 $PHPENV_ROOT 是否已存在、是否已有 git 仓库。它不会自动拉取最新 commit,更不会执行 git pull;多数情况下只是静默退出或报错“already exists”。
正确更新phpenv的两种方式
更新本质是更新 phpenv 自身代码(即其 git 仓库),不是重跑安装器:
- 进入
$PHPENV_ROOT目录(默认为~/.phpenv),手动执行git pull - 如果提示 “not a git repository”,说明你当初用 installer 安装时没启用 git clone(旧版 installer 有此缺陷),此时应删掉整个目录,再用带
git clone的方式重装 - 确认更新后,运行
phpenv --version查看输出是否含最新 commit hash(如v1.2.4-23-ga1b2c3d)
php-build插件也要单独更新
php-build 是独立插件,不随 phpenv 自动更新。它的更新逻辑和 phpenv 一样:
- 插件路径通常为
$(phpenv root)/plugins/php-build - 进入该目录,执行
git pull - 若不存在,先补装:
git clone https://github.com/php-build/php-build $(phpenv root)/plugins/php-build - 更新后建议运行
phpenv install --list,检查是否出现新 PHP 小版本(如 8.3.14)
为什么更新后phpenv install还失败
常见原因不是 phpenv 本身旧,而是构建依赖缺失或配置过期:
- Ubuntu/Debian 上缺
oniguruma-dev(PHP 8.0+ 必需),导致 configure 报错Could not find oniguruma - macOS 上 Xcode command line tools 未更新,
make报clang: error: unsupported option '-fopenmp' - 环境变量
PHP_BUILD_CONFIGURE_OPTS里写了已废弃的选项(如--with-mcrypt),必须删掉 - 某些 Linux 发行版的 OpenSSL 版本过高(如 3.0+),需加
--with-openssl=/usr显式指定路径
真正容易被忽略的是:phpenv 更新只改了 shell shim 和命令分发逻辑,所有实际编译动作都由 php-build 承担——所以看到 install 失败,第一反应不该是“phpenv 没更新好”,而应先 cd $(phpenv root)/plugins/php-build && git log -n 3 确认插件是否真同步到了最新定义。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











