phpenv 安装后需执行 phpenv init - 并 source 配置、安装版本后必须 phpenv rehash,否则 which php 仍指向系统路径且 phpenv global 无效。

phpenv 安装完不配置,php 命令大概率还是调用系统自带或旧版本,phpenv global 也完全无效——这不是 bug,是没走通 shims 机制。
确认 phpenv 命令本身能执行
先排除最基础的 PATH 问题:运行 which phpenv。如果返回空或报 command not found,说明环境变量根本没生效。
- 检查你改的是哪个 shell 配置文件:
~/.bashrc(常见于 Ubuntu)、~/.zshrc(macOS Catalina+ 默认)、~/.bash_profile(部分 macOS 或手动配置) -
echo $PATH输出里必须包含$HOME/.phpenv/bin(或你实际安装的路径,比如/usr/local/phpenv/bin) - 别只靠
exec $SHELL -l,更稳妥的是新开一个终端窗口,再试phpenv --version
必须执行 phpenv init - 并重载配置
phpenv init - 不是可选项,它输出的是关键的 shell hook 脚本,负责拦截 php、composer 等命令并路由到当前激活版本的 shim 二进制文件。
- 确保这行进了你的 shell 配置:
eval "$(phpenv init -)" - 执行
source ~/.bashrc(或对应文件)后,再运行which php,结果应类似/home/xxx/.phpenv/shims/php,而不是/usr/bin/php - 如果
phpenv init -报错no such command 'init',说明仓库克隆不完整,删掉~/.phpenv重新git clone
安装 PHP 版本后务必 phpenv rehash
phpenv 不会自动发现新安装的 PHP 二进制文件。即使 phpenv install 8.2.12 成功,phpenv versions 里也不显示,phpenv global 8.2.12 更会失败。
- 每次成功运行
phpenv install X.Y.Z后,立刻执行phpenv rehash - 该命令扫描
~/.phpenv/versions/下所有子目录,为每个版本生成对应的 shim(如~/.phpenv/shims/php、~/.phpenv/shims/composer) - 漏掉这步,
php -v永远不会变,phpenv versions也看不到刚装的版本
验证是否真正在用 phpenv 管理的 PHP
别只信 php -v,要确认执行路径和配置来源:
-
which php必须指向~/.phpenv/shims/php -
php --ini输出的Loaded Configuration File应该是~/.phpenv/versions/8.2.12/etc/php.ini这类路径,而非/etc/php/8.2/cli/php.ini - 进项目目录后,
cat .php-version和phpenv version输出应一致;如果phpenv version显示system,说明当前目录没设本地版本,且没设全局版本
最容易被忽略的是 rehash 和 which php 验证——很多人以为装完就完事,其实只是把二进制放对了地方,shim 层根本没建起来。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











