Composer install 报 platform requirements 错误是因为当前 PHP 版本、扩展或库不满足依赖声明;应优先补全环境,仅在确认运行时安全时用 --ignore-platform-reqs 临时跳过校验。

为什么 composer install 会报 platform requirements 错误?
Composer 在安装依赖时默认校验当前 PHP 版本、扩展(如 ext-mbstring)和库(如 lib-curl)是否满足 composer.json 中 platform 或各包的 require 字段声明。一旦不匹配,就会中断安装并提示类似:
Required platform extensions missing: mbstring, zip
这常见于:CI 环境 PHP 版本偏低、Docker 构建阶段未装扩展、或本地开发环境与生产环境存在版本差异。此时不是“绕过检查”,而是明确告诉 Composer:“我清楚环境不达标,但仍要继续安装”。
使用 --ignore-platform-reqs 的正确姿势
该参数作用是跳过所有平台约束检查,包括 PHP 版本、扩展、lib 库等。但它不解决运行时错误——如果代码真调用了 mb_strlen() 而没装 ext-mbstring,程序启动仍会崩溃。
- 只应在确认运行环境实际可用(比如容器里后续会补装扩展)或临时调试时使用
- 不建议加到
composer.json的config里长期启用,否则团队成员容易忽略真实依赖问题 - 可配合
--no-scripts避免执行需要特定扩展的 post-install 脚本 - 若只想忽略某一项(如只跳过
php版本检查),用--ignore-platform-req=php更精准
典型命令:
composer install --ignore-platform-reqs
--ignore-platform-reqs 和 platform 配置的区别
platform 是在 composer.json 中声明“假装”有某个环境,例如:
"config": {
"platform": {
"php": "8.1.0",
"ext-gd": "1.0"
}
}
它会影响依赖解析结果(比如让 Composer 选一个标称支持 PHP 8.1 的包版本),但不会跳过真实扩展检测;而 --ignore-platform-reqs 是强制跳过全部校验,不改变依赖选择逻辑,只让安装流程通过。
二者可共存,但语义不同:前者是“模拟平台能力”,后者是“无视平台能力”。多数 CI 场景更适合用 --ignore-platform-reqs,因为构建镜像里 PHP 版本固定,不需要“模拟”。
CI/CD 中常见踩坑点
很多用户在 GitHub Actions 或 GitLab CI 里加了 --ignore-platform-reqs 却仍失败,原因通常是:
- 用了
composer install --ignore-platform-reqs,但vendor/autoload.php后续被 PHP 脚本 require 时,因缺少扩展直接 fatal error - 误以为该参数能跳过
require-dev的平台检查——它同样生效,但如果你的测试工具(如 PHPUnit)依赖高版本 PHP,运行时仍会挂 - 在多阶段 Dockerfile 中,build 阶段用了该参数,但 final 阶段没复制对应扩展,导致运行时报错
真正安全的做法是:在构建环境里补全缺失扩展,而不是依赖这个参数掩盖问题。只有当扩展确实无法安装(如某些 lib 依赖冲突),且你确定代码不触发相关路径时,才用它兜底。










