phpenv install 命令不存在是因为默认 phpenv 仅提供版本切换功能,必须安装 php-build 插件才能支持编译安装PHP版本;安装后需重新加载 shell 配置并执行 phpenv rehash 才能生效。

phpenv 能装多个 PHP 版本,但必须先装 php-build 插件,否则 phpenv install 命令根本不存在。
为什么 phpenv install 报错“command not found”
默认克隆的 phpenv 只是版本切换壳子,不带编译安装能力。它依赖 php-build 插件来下载源码、配置参数、编译安装——没装这个插件,phpenv install 就只是个摆设。
- 必须执行:
git clone https://github.com/php-build/php-build $(phpenv root)/plugins/php-build - 装完后要重新加载 shell 配置(比如
source ~/.zshrc),否则phpenv install仍不可用 - 某些旧文档写成
$(phpenv root)/plugins/php-build路径不存在,实际应为$(phpenv root)/plugins/php-build(注意拼写)
安装 PHP 版本时传参方式很关键
phpenv install 支持两种传参形式,行为完全不同:
- 只写版本号:
phpenv install 8.3.13→ 使用插件内置的默认 configure 选项(通常不含--with-openssl或--enable-intl,容易导致后续 Composer 或扩展失败) - 加自定义参数:
phpenv install 8.3.13 --with-openssl --enable-intl --with-zlib→ 这些参数会透传给./configure,但要注意:PHP 8.2+ 开始,--with-pear不再自动启用,需显式加上 - 若想一劳永逸,可修改
$(phpenv root)/plugins/php-build/share/php-build/default_configure_options文件,把常用选项写死进去
切换版本后 php -v 没变?检查 rehash
phpenv 用 shims 机制拦截命令,每次新装一个 PHP 版本后,必须运行 phpenv rehash,否则 php、phpize 等二进制 shim 文件不会生成,终端还是调用系统原有 PHP。
立即学习“PHP免费学习笔记(深入)”;
- 常见误操作:装完
8.3.13后直接phpenv global 8.3.13,忘了rehash,结果php -v显示的仍是 7.4 - 验证是否生效:运行
which php,正确路径应类似~/.phpenv/shims/php,而不是/usr/bin/php - 如果用了
phpenv local,记得当前目录下要有.php-version文件(内容就是版本号,如8.3.13),且文件不能带空行或 BOM
多项目共存时最容易忽略的陷阱
全局、本地、会话三级切换看似灵活,但优先级和持久性常被误判:
-
phpenv global写入的是~/.phpenv/version,影响所有未设本地版本的目录 -
phpenv local在当前目录生成.php-version,但该文件**不会被 Git 跟踪**(除非你手动加进.gitignore除外),团队协作时容易漏配 -
phpenv shell设置的PHPENV_VERSION环境变量只在当前终端有效,关掉就失效,CI 脚本里慎用 - 最稳妥的做法:每个项目根目录放一个明确的
.php-version,并把它加入 Git —— 这样新人 clone 后cd进去就自动切对版本



















