platform-check 是 Composer 2.2+ 在 install/update 时自动执行的平台兼容性校验,比对 composer.json 中声明的 PHP/扩展要求与当前 CLI 环境是否匹配,不匹配则报错中止;它无独立命令,可通过 composer show --platform 查看实际校验项。

Composer 的 platform-check 不是独立命令,而是 composer install 和 composer update 在执行时自动触发的 PHP 环境兼容性校验环节。它不提供手动触发的 CLI 子命令,也不能跳过(除非显式禁用)。
platform-check 是什么,为什么它会报错
它是 Composer 2.2+ 引入的默认行为:在安装/更新前,比对 composer.json 中 "platform" 配置(或隐式平台版本)与当前运行环境的 PHP 版本、扩展是否匹配。一旦发现不兼容(比如 "php": "^8.2" 但本地是 PHP 8.1),就中止操作并抛出类似 Your platform does not meet the requirements... 的错误。
- 错误不是来自依赖包本身,而是来自你声明的平台约束
- 即使没写
"platform",Composer 也会用当前 PHP 版本和已加载扩展作为隐式平台基准 - 该检查发生在
vendor/autoload.php生成前,所以无法靠修改 autoloader 绕过
如何查看当前 platform-check 实际校验了哪些项
运行 composer show --platform 可直接输出 Composer 当前“认为”的平台能力 —— 包括 PHP 版本、ext-* 扩展状态、lib-* 库版本等。这是最接近“手动触发 platform-check”的方式。
composer show --platform
输出示例:
php: 8.2.12 ext-zip: 8.2.12 ext-pdo: 8.2.12 lib-curl: 7.88.1
这个结果就是 platform-check 内部比对所依据的数据源。如果你的 composer.json 里写了 "php": ">=8.3",而这里显示 php: 8.2.12,就必然失败。
绕过或调整 platform-check 的三种真实场景做法
不推荐无脑跳过,但某些 CI/容器部署或临时调试确实需要干预:
- 临时忽略全部平台检查:
composer install --ignore-platform-reqs(慎用,可能装出无法运行的依赖) - 只忽略某一项(如 PHP 版本):
composer install --ignore-platform-req=php - 显式锁定平台版本(最稳妥):在
composer.json中添加"platform"段,例如
{
"config": {
"platform": {
"php": "8.2.12",
"ext-gd": "8.2.12"
}
}
}
这样 platform-check 就以你声明的为准,而非探测运行时环境 —— 常用于 Docker 构建中确保一致性。
常见误操作和隐藏坑
很多人以为改 php.ini 或重启 Web 服务器就能让 platform-check 通过,其实完全无效,因为:
- Composer 运行时使用的是 CLI 模式的 PHP(
which php),不是 Apache/Nginx 加载的 SAPI -
ext-redis已安装但未启用(extension=redis.so注释掉),composer show --platform就不会列出它 - Mac 上用 Homebrew 升级 PHP 后,终端仍调用旧版:执行
hash -d php或重开终端,否则composer读到的仍是旧php -v -
"platform-check"名字容易让人误以为存在composer platform-check命令 —— 它真的不存在
真正要验证环境是否达标,唯一可靠路径是:先确认 CLI PHP 版本和扩展(php -v + php -m),再跑 composer show --platform,最后对照 composer.json 的 require 和 config.platform。









