必须确认编译环境,phpenv install 前需安装 gcc、make、autoconf、libssl-dev 等依赖,否则 configure 阶段报错;ubuntu/debian 执行 sudo apt install build-essential libssl-dev libxml2-dev libcurl4-openssl-dev 等,macos 用 brew install autoconf automake openssl@3 libxml2 补齐;phpenv 默认源码编译,与系统包管理器安装的 php 互不影响。

phpenv install 装多个版本前必须确认编译环境
直接运行 phpenv install 8.3.13 或 phpenv install 7.4.33 前,系统得有 gcc、make、autoconf、openssl-dev 等基础编译工具,否则会卡在 configure 阶段报错,比如 configure: error: Please reinstall the BZip2 distribution。Ubuntu/Debian 上跑一遍 sudo apt install build-essential libssl-dev libxml2-dev libcurl4-openssl-dev libjpeg-dev libpng-dev libfreetype6-dev 更稳妥;macOS 用户用 brew install autoconf automake openssl@3 libxml2 补齐依赖。
注意:phpenv 默认走源码编译,不依赖系统包管理器(如 apt/yum),所以即使你已用 apt install php8.1 装过系统 PHP,phpenv install 仍会从头编译一份独立副本,互不影响。
phpenv local 和 phpenv global 切换逻辑容易混淆
phpenv global 设的是当前用户的默认 PHP 版本,对所有未设 local 的目录生效;phpenv local 则在当前目录生成一个 .php-version 文件,只影响该目录及子目录——这个文件会被 git 跟踪,适合团队协作统一环境。
- 执行
phpenv local 7.4.33后,cd 进该目录,php -v显示 7.4.33;cd 到其他目录,php -v回到 global 版本 - 若某目录下已有
.php-version,再执行phpenv local 8.3.13会覆盖它,不是追加 - 想取消 local 设置?删掉
.php-version文件,或运行phpenv local --unset - 误用
phpenv global锁死版本后,命令行里所有项目都跟着变,排查问题时容易漏掉这个全局开关
phpenv rehash 不是可选项,是必做动作
每次 phpenv install 新版本或 phpenv local/global 切换后,必须运行 phpenv rehash。它负责重建所有 shims(即 ~/.phpenv/shims/php 这类代理脚本),否则终端仍调用旧版本,php -v 看起来没变化,但 phpenv which php 会暴露路径没更新。
常见现象:装完 8.3.13,phpenv versions 能看到,phpenv global 8.3.13 也执行了,但 php -v 还是 7.4 —— 八成是忘了 rehash。CI 脚本里建议写成:
phpenv install 8.3.13 phpenv global 8.3.13 phpenv rehash
别省这一步。
Windows 下 phpenv 不可用,得换思路
phpenv 是 POSIX shell 工具,原生不支持 Windows cmd/PowerShell。强行在 WSL 里用可以,但纯 Windows 命令行下无效。这时候别折腾兼容层,直接用批处理方案更实在:
- 把 PHP 7.4 解压到
C:\php\74\,8.3 解压到C:\php\83\ - 新建
php74.bat,内容为:@C:\php\74\php.exe %* - 新建
php83.bat,内容为:@C:\php\83\php.exe %* - 把存这些 .bat 的目录加进系统 PATH
之后在任意位置敲 php74 -v 或 php83 -v 就能精准调用——比改环境变量、删重名文件、套 Docker 轻量得多,也更可控。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











