composer 不会忽略 php 版本要求,只是跳过平台检查;报错“your php version does not satisfy…”是因 install/update 阶段默认校验 php/ext-* 是否满足 require 声明,属保护机制而非 bug。

Composer 不会真正“忽略”PHP 版本要求,它只是跳过平台检查——但后果得你自己兜底。
为什么 composer install 报错 “Your PHP version does not satisfy…”
这是 Composer 在安装前做的平台约束校验(platform check),默认会比对 php、ext-* 等扩展是否满足 composer.json 中 require 或依赖包的 require 声明。不是 bug,是保护机制。
- 常见错误现象:
Your requirements could not be resolved to an installable set of packages.+ 一堆 PHP 版本/扩展不匹配提示 - 典型场景:本地开发用 PHP 8.1,但部署环境是 PHP 7.4,又想在本地跑通
composer install生成兼容锁文件 - 注意:这个检查只发生在
install和update阶段,dump-autoload不触发
用 --ignore-platform-reqs 跳过全部平台检查
最直接的办法,但也是最粗暴的——它绕过所有 php、ext-curl、ext-mbstring 等平台依赖校验。
- 适用情况:你明确知道目标环境已满足运行条件,只是本地 PHP 版本/扩展和
composer.json声明不一致 - 命令示例:
composer install --ignore-platform-reqs - 风险点:如果漏掉关键扩展(比如依赖
ext-gd却没装),项目 runtime 会直接报Class not found或Call to undefined function - 不会影响
autoload逻辑,也不会改变生成的composer.lock中 PHP 版本字段
精准忽略某项(比如只跳过 PHP 版本)
用 --ignore-platform-req(单数)指定具体项,比全关安全得多。
立即学习“PHP免费学习笔记(深入)”;
- 只忽略 PHP 版本:
composer install --ignore-platform-req php - 忽略多个项(重复使用):
composer install --ignore-platform-req php --ignore-platform-req ext-zip - 注意拼写:必须严格匹配扩展名或
php,ext-iconv不能写成iconv,php不能写成PHP - 这个参数不影响依赖解析逻辑,只跳过安装前的预检;Composer 仍会按
composer.json的platform配置生成composer.lock
更稳妥的做法:用 config.platform 声明目标环境
与其每次加参数,不如在 composer.json 里声明你要适配的平台——这才是可复现、可提交、CI 友好的方式。
- 在
composer.json的config下加:
"config": {
"platform": {
"php": "7.4.33",
"ext-zip": "1.15.0"
}
}
composer install 就自动按这个平台去解析依赖,无需额外参数--ignore-platform-req
config.platform 是硬覆盖,即使你本地有 ext-redis,只要没写进 platform,Composer 就当它不存在——所以只写你**目标环境一定有**的项真正麻烦的从来不是怎么跳过检查,而是跳过后没人验证目标环境是否真能跑起来。尤其当 platform 配置和实际扩展加载状态不一致时,错误会延迟到第一次调用函数才暴露。











