应明确指定目标php版本执行composer install,如linux/macos用/usr/bin/php8.1 composer install、windows用"c:\php\8.1\php.exe" composer install,并确保php -v、which php和php_binary三者一致。

Composer 本身不支持多版本 PHP,它只是个 PHP 脚本,完全依赖你 shell 中 php 命令指向的解释器。所谓“支持多版本”,其实是你手动控制用哪个 PHP 二进制去跑它。
composer install 报 “PHP version does not satisfy requirement” 怎么办
这不是 Composer 配置问题,而是它正用你系统里默认的 php 命令在跑,而那个版本和 composer.json 里写的 "php": "^8.1" 对不上。
- 运行
php -v和which php,确认当前生效的是哪个路径、哪个版本 - 别信
composer config platform.php—— 它只影响包版本选择(“假装有 8.1”),不改变实际运行环境 - 临时解决就一条命令:
/usr/bin/php8.1 /usr/local/bin/composer install(Linux/macOS)或"C:\php\8.1\php.exe" composer install(Windows) -
COMPOSER_PHP环境变量是 Composer 2.2+ 原生支持的方式,比 alias 更干净,且不干扰其他命令
为什么不能只靠 config.platform.php
"config": {"platform": {"php": "8.1.0"}} 是编译期“欺骗”,只在 install/update 阶段起作用,告诉依赖解析器:“请按 PHP 8.1 来选包”。但它完全不改变运行时行为。
- 你在 PHP 7.4 下设了
platform.php = "8.2",composer update成功了,但一跑代码就ParseError: syntax error, unexpected token "match" - CI 用 PHP 8.1 构建,本地用 8.3 开发,仅靠
platform无法复现 CI 的依赖解析结果 -
platform不检查扩展是否启用,"ext-mbstring": "*"写了也没用;如果 PHP 8.1 没开mbstring,安装仍会失败
怎么确认 Composer 实际用的是哪个 PHP 版本
别信 which php 的路径就代表 Composer 在用它——关键看执行时真正调用的解释器。
- 很多系统里
composer是 shell 脚本,开头写着#!/usr/bin/env php,它最终调用的仍是$PATH里第一个php - 运行
file $(which composer),如果输出含 “shell script”,再跑head -n1 $(which composer)查 shebang 行 - 更直接:运行
php -r "echo PHP_BINARY;",这个输出才是 Composer 内部真实调用的 PHP 二进制路径 - macOS Homebrew 用户特别注意:
php@8.1安装后不会自动替换/usr/bin/php,php -v可能还是系统老版本
切换 PHP 版本后 vendor 目录必须重装
不同 PHP 版本下生成的 vendor/ 不可混用,尤其涉及:
- PHP 扩展可用性(如
ext-gd、ext-xml是否加载) - 类加载逻辑(如 PHP 8.0+ 的联合类型、
match表达式在低版本直接 parse 失败) - 自动加载器缓存(
vendor/autoload_static.php里硬编码了路径和类映射) - 某些插件或脚本(如
phpunit、larastan)可能在autoload-dev下,但运行时仍需对应 PHP 版本支持
最稳妥的做法永远是:换 PHP 版本 → 删 vendor → 用目标 PHP 显式执行 composer install。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











