phpenv切换php版本有三种方式:①global设系统默认版本,②local为项目生成.php-version文件自动生效,③shell仅当前会话有效;优先级为shell>local>global,不可混用以免覆盖预期行为。

phpenv 切换 PHP 版本的三种方式,别混用
切换版本不是只有 phpenv global 一种操作,用错场景会覆盖预期行为。关键看你要影响的范围:
-
phpenv global 8.3.13:改系统级默认版本,所有新终端、未设本地版本的项目都走这个 -
phpenv local 7.4.33:在当前项目目录下执行,会生成.php-version文件,下次cd进来自动生效 -
phpenv shell 8.2.20:只对当前 Shell 会话有效,关掉终端就失效,适合临时调试
注意:shell 和 local 同时存在时,shell 优先级最高;local 比 global 优先级高。别在项目里跑 global,容易误伤其他项目。
phpenv 支持的 PHP 版本范围,从 5.6 到 8.3 都行
官方插件 php-build 内置了大量预定义版本定义,不需要手动写 configure 脚本就能装。你执行 phpenv install --list 就能看到全部可安装版本(截至 2026 年初,最新稳定版是 8.3.13)。
- 老项目兼容:支持
5.6.40、7.2.34、7.4.33 - 主流开发:完整支持
8.0.x~8.3.x全系列 - 不支持 Windows 原生环境(Windows 用户看到的是另一个叫
phpEnv的图形化工具,和phpenv无关)
想装某个冷门版本但列表里没有?可以手动放定义文件到 $(phpenv root)/plugins/php-build/share/php-build/definitions/,然后重试 phpenv install。
为什么 php -v 没变?常见失效原因
执行完 phpenv global 或 local 后 php -v 还是旧版本,大概率是 Shell 没加载好 phpenv 初始化代码。
- 检查是否漏了这句:
eval "$(phpenv init -)"—— 必须加进你的~/.bashrc或~/.zshrc - 改完配置后没重载:
source ~/.bashrc(或对应 Shell 配置文件) - 用了
sudo php:权限提升后环境变量重置,phpenv不起作用 - 某些 IDE(如 PhpStorm)启动终端时不读取 Shell 配置,需在设置里勾选 “Shell integration”
PHP 编译参数会影响扩展可用性,别跳过
phpenv install 默认启用基础模块,但像 openssl、gd、mbstring 这些常用扩展,得靠环境变量提前声明:
- 装前设好:
export PHP_BUILD_CONFIGURE_OPTS="--with-openssl --with-gd --enable-mbstring" - 否则装完发现
composer install报ext-mbstring missing,就得重装 - 不同 PHP 小版本对 OpenSSL 库路径敏感(尤其 macOS),建议统一用
--with-openssl=/usr/local/opt/openssl@3显式指定
真正麻烦的不是切换版本,而是每次重装都要重新确认扩展是否齐全——建议把常用 configure 参数存成 alias 或脚本,避免重复踩坑。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











