phpenv 没有 uninstall 命令,卸载 php 版本需手动删除 $(phpenv root)/versions/对应版本目录,再执行 phpenv rehash 更新 shim;否则 phpenv versions 仍显示残留,php 调用可能报错或指向已删路径。

phpenv uninstall 命令不能直接删已安装的PHP版本
phpenv 没有 phpenv uninstall 这个命令,所有“卸载 PHP 版本”的操作本质是手动删除目录 + 重建 shim。执行 phpenv install 8.2.10 后,版本实际被解压安装到 $(phpenv root)/versions/8.2.10,它不注册进包管理器,也不写服务或配置文件——删掉这个目录就等于卸载了该版本。
常见错误现象:
- 运行
phpenv uninstall 7.4.33报错command not found - 用
rm -rf ~/.phpenv/versions/7.4.33删除后,phpenv versions仍显示该版本(带 * 或残留条目)
正确做法:
- 先停掉可能正在用该版本的进程:
ps aux | grep php,重点看是否还有php-fpm子进程在跑 7.4.33 - 执行
rm -rf $(phpenv root)/versions/7.4.33(注意不是~/.phpenv/versions/...,因为$(phpenv root)可能是/usr/local/phpenv) - 必须立刻运行
phpenv rehash,否则phpenv versions缓存未更新,shim 文件(如~/.phpenv/shims/php)仍指向已删路径,调用会报No such file or directory
删完版本后 php -v 还显示旧版本?检查 PATH 和 shim 生效链
即使删了 versions/7.4.33 并 rehash,php -v 仍可能输出旧版本——说明当前 shell 没走 phpenv 的 shim,而是调用了系统其他位置的 php。
排查步骤:
- 运行
which php:如果返回/usr/bin/php或/opt/homebrew/bin/php,说明 phpenv 的shims目录没在PATH前置位 - 运行
phpenv which php:应返回类似~/.phpenv/versions/8.3.13/bin/php;若报错或为空,说明phpenv init -没生效或shims路径未加入PATH - 检查 shell 配置文件(
~/.bashrc、~/.zshrc)里是否有两段关键内容:
export PATH="$HOME/.phpenv/bin:$PATH" eval "$(phpenv init -)"
缺任意一行,或 eval 行被注释掉,都会导致 phpenv 失效。改完务必 source ~/.zshrc(或对应 shell 文件)。
phpenv rehash 失败或不生效的三个典型原因
phpenv rehash 的作用是扫描 versions/ 下每个子目录的 bin/,为其中可执行文件(php、phpize、php-config 等)生成符号链接到 shims/。它失败意味着新版本不可用、旧版本删不干净。
-
versions/下存在空目录或权限不足的子目录(比如7.4.33已删但留了个空壳),rehash会跳过或报错,导致 shim 不全 - 当前用户对
~/.phpenv/shims无写权限(常见于 sudo 安装后 chown 错误),rehash静默失败 - shell 启动时未加载
phpenv init -输出的 shim 路径,即$HOME/.phpenv/shims不在PATH中——此时rehash白做
验证方式:运行 ls -la ~/.phpenv/shims/,应看到一堆指向 ../libexec/phpenv-exec 的软链;若为空或报 Permission denied,就得先修权限或 PATH。
彻底清理 phpenv:删 root 目录前先确认无项目依赖
执行 rm -rf $(phpenv root) 是最彻底的卸载方式,但它会连带删掉所有已安装 PHP 版本、插件(如 php-build)、以及项目级 .php-version 的解析能力。
容易踩的坑:
- 你可能在某个项目根目录写了
.php-version,但忘了这行只对 phpenv 有效;删了 phpenv 后,php -v会退回到系统默认 PHP,可能导致composer install失败或语法报错 -
$(phpenv root)默认是~/.phpenv,但如果你当初用PHPENV_ROOT=/usr/local/phpenv安装,那真实路径是/usr/local/phpenv,rm -rf ~/.phpenv根本删不到 - 删完别急着重装——先检查
~/.bashrc里是否还残留export PATH="...$HOME/.phpenv/bin:..."和eval "$(phpenv init -)",否则新终端一开就报 command not found
真正干净的状态是:which php 返回系统路径或为空,phpenv --version 报 command not found,且 ~/.bashrc 里找不到任何 phpenv 相关行。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











