composer check-platform-reqs 是 composer 3.0+ 用于校验当前 php 环境是否满足 composer.json 中 platform 及依赖的 php 版本、扩展等约束的静态检查命令,不安装包,仅做环境兼容性验证。

composer check-platform-reqs 是 Composer 3.0+ 引入的官方命令,用于检查当前 PHP 环境是否满足项目 composer.json 中声明的 platform 或依赖包的 require 约束(比如 "php": "^8.1"、"ext-gd": "*")。它不安装任何包,只做静态环境校验——这是它和 composer install 的关键区别。
什么时候必须用 check-platform-reqs
当你遇到以下情况时,这个命令能快速定位问题根源:
- CI/CD 流水线里
composer install失败,但报错模糊(比如 “Your requirements could not be resolved”),而你怀疑是 PHP 版本或扩展缺失 - 团队协作中,有人本地能装,有人不能,想快速比对平台兼容性
- 准备升级 PHP 版本前,提前验证现有
composer.json是否兼容新环境 -
composer update提示 “Package x requires ext-y, but it is not installed”,但你不确定是没启用还是根本没编译进 PHP
check-platform-reqs 的默认行为和常用选项
它默认只检查 composer.json 顶层的 require 和 config.platform,不递归检查已锁版本(composer.lock)里的依赖约束。常见组合:
- 基础检查:
composer check-platform-reqs—— 输出所有未满足项,状态码为 1 表示失败 - 只看失败项:
composer check-platform-reqs --fail-on-missing—— 隐藏通过项,仅打印缺失扩展或版本不匹配项 - 包含已安装的包约束:
composer check-platform-reqs --with-dependencies—— 会读取composer.lock,检查所有已锁定依赖的平台要求(更严格,也更慢) - 指定 PHP 版本模拟:
composer check-platform-reqs --platform=php:8.2.10—— 不依赖当前php -v,适合测试未来环境
和 composer diagnose 的核心区别
diagnose 关注 Composer 自身配置、网络、权限等运行时健康状况;check-platform-reqs 只聚焦「PHP 解释器 + 扩展 + 版本号」是否满足项目声明的需求。两者互补,但目的不同:
-
diagnose报 “The php.ini used by your command-line PHP is: /etc/php/8.1/cli/php.ini” → 是在告诉你 PHP 配置位置 -
check-platform-reqs报 “ext-gd: missing (required by vendor/symfony/console)” → 是在告诉你缺扩展,且谁依赖它 - 如果你改过
config.platform(比如强制设"php": "7.4"),check-platform-reqs会按这个假定值校验,而非真实 PHP 版本
容易被忽略的细节
这个命令不会检测扩展的**功能子集**。例如:ext-curl 已加载,但 PHP 编译时没带 --with-openssl,导致 curl 不支持 https —— check-platform-reqs 无法发现。它只认 extension_loaded('curl') 返回 true 就算通过。
另外,某些扩展(如 ext-sodium)在 PHP 7.2+ 是内建的,但 windows 下可能仍需手动开启 php_sodium.dll;命令只会检查是否加载,不区分“内建”还是“DLL”。如果扩展名拼写错误(比如写成 sodium 而非 sodium),也会误报为缺失。