在 composer.json 的 config 字段中添加 "platform-check": false 即可禁用平台检查,该配置仅作用于当前项目,且必须为布尔值 false,生效于 install、update 和 require 命令。

composer install 时提示 platform-check failed 怎么办
直接在 composer.json 里关掉平台检查,不是改命令参数,而是改配置本身。因为 composer install 默认会校验当前 PHP 版本、扩展是否满足 platform 声明,不匹配就报错停住——哪怕你心里清楚“这项目真能在低版本跑”,它也不让过。
怎么在 composer.json 中禁用 platform-check
往 composer.json 的根对象里加一个 "config" 字段,里面设 "platform-check": false:
{
"require": { ... },
"config": {
"platform-check": false
}
}
注意:这个配置只影响当前项目,不会污染全局;且必须是布尔值 false,不能写成字符串 "false" 或数字 0,否则无效。
- 生效时机:仅对
composer install和composer update生效(composer require也会触发) - 不推荐在 CI/CD 或生产部署中长期开启,容易掩盖真实兼容性问题
- 如果项目用了
config.platform手动声明了 PHP 版本或扩展,关掉platform-check后,这些声明就完全被跳过了
为什么不能用 --ignore-platform-reqs 一劳永逸
--ignore-platform-reqs 是临时绕过手段,但每次运行都要加,容易漏;更重要的是它会忽略所有平台依赖(包括 ext-redis、php 版本、lib-* 等),而 platform-check: false 只关闭校验逻辑,不干扰依赖解析本身。
-
--ignore-platform-reqs还会跳过config.platform的模拟行为,可能导致本地装的包和线上实际环境不一致 - 某些私有仓库或 Composer 插件(比如
hirak/prestissimo旧版)可能不识别该 flag,但一定认config.platform-check - 团队协作时,把配置写进
composer.json比靠口头约定“大家记得加 flag”靠谱得多
关掉之后还可能出什么问题
最典型的不是报错,而是静默失败:比如项目依赖 ext-gd,你关了检查,composer install 成功了,但运行时 gd_info() 报 Call to undefined function —— 因为扩展根本没装。
- PHP 版本不匹配时,可能遇到语法错误(如用了
match表达式却跑在 8.0 以下) - 某些包的
autoload或classmap生成逻辑依赖特定 PHP 版本特性,关检查后 autoloader 可能漏加载 - 如果你在 Docker 或容器里开发,建议仍保持
platform-check: true,并在Dockerfile中明确安装对应扩展,而不是靠关检查来迁就环境
真正要绕开检查,通常是因为开发机 PHP 版本比项目要求的低,又暂时没法升级——这时候关检查只是权宜之计,别忘了记个 TODO,等环境齐了再开回来。










