先确认Composer实际调用的PHP版本:运行composer --version看首行输出,或head -1 $(which composer)查shebang;若走env php则取决于PATH顺序。

composer install 时 PHP 版本不匹配,先看它到底用了哪个 php
别急着改配置,composer install 报错说 “Your PHP version (7.4.33) does not satisfy that requirement”,但你明明装了 PHP 8.2?问题大概率出在 Composer 并没调用你预期的那个 php。
最准的确认方式只有两个:
- 运行
composer --version,第一行输出如PHP 8.2.5 (cli)就是真实版本 - 查 shebang:
head -1 $(which composer),看是否硬编码了#!/usr/bin/php8.1或#!/usr/bin/env php
如果输出里没带 PHP 版本,说明走的是 env php,那最终用谁,取决于 $PATH 里谁排第一——which php 和 which composer 的路径可能完全不同。
临时换 PHP 版本运行 composer install(CI/CD 和本地调试首选)
这是绕过所有 PATH、alias、shebang 干扰的最可靠方式,命令一跑完就结束,适合快速验证或流水线脚本:
立即学习“PHP免费学习笔记(深入)”;
- Linux/macOS:
/usr/bin/php8.1 /usr/local/bin/composer install - macOS Homebrew:
/opt/homebrew/bin/php@8.1 ./composer.phar update(注意@符号不能漏) - Windows:
C:\php-8.2\php.exe C:\tools\composer.phar install
确保 composer.phar 有可执行权限:chmod +x composer.phar。这个方式不改任何配置,也无需重装 Composer。
config.platform.php 必须写完整小版本号,否则等于没配
想让 composer install 装出兼容 PHP 7.4 的旧版包,就得让它“以为”自己在 PHP 7.4 下运行——这靠的是平台伪装,不是换系统 PHP。
在 composer.json 的 config 段加 platform:
{
"config": {
"platform": {
"php": "7.4.33"
}
}
}
- 必须写成带补丁号的完整版本,比如
"7.4.33"或"8.1.27";"php": "7.4"或"^7.4"都无效,Composer 会直接忽略 - 改完必须跑
composer update --lock,否则composer install还是读旧composer.lock - 该配置只影响当前项目,不影响其他项目,也不改系统 PHP
--platform=php:x.x 是临时覆盖的快捷方式,别和 --ignore-platform-req=php 混用
适合 CI 构建或快速验证,不用改 composer.json。例如在 PHP 8.2 环境下临时装 PHP 8.1 兼容包:
composer install --platform=php:8.1
- 这个参数从 Composer 2.2+ 开始支持,等效于本次命令中把
config.platform.php设为"8.1.0" - 比
--ignore-platform-req=php安全:后者完全跳过 PHP 校验,可能装出运行时报错的包 - 不能混用多个
--platform,只认最后一个 - 执行后可用
composer show --platform确认本次生效的平台版本
真正要验证某个旧包能否在 PHP 7.4 下跑通,最后一步永远是用目标 PHP 版本执行 vendor/autoload.php 或关键脚本——这点最容易被跳过。



















