platform-check 是 composer 2.2+ 内置的诊断命令,仅校验当前 php 环境是否满足 composer.json 中声明的 platform 约束(如 php 版本、扩展存在性),不检查代码、功能可用性或系统依赖,用于提前发现环境不一致问题。

platform-check 是什么,它检查什么
platform-check 是 Composer 2.2+ 内置的一个诊断命令,不是第三方插件。它不检查你的代码或依赖逻辑,只验证当前运行环境是否满足 composer.json 中声明的 platform 约束(比如 "php": ">=8.1")以及项目依赖要求的扩展(如 "ext-gd": "*")。它的核心作用是:提前暴露“本地能装、线上跑不了”的环境不一致问题。
常见触发场景包括:CI 流水线构建失败、Docker 容器内 composer install 报错但本地正常、上线后提示 Class not found 却查不到扩展缺失日志。
怎么运行 platform-check,参数怎么选
直接执行 composer platform-check 即可,默认读取当前目录下的 composer.json 并比对当前 PHP 环境。它不会修改任何文件,纯只读检测。
- 加
--no-dev:跳过 require-dev 中的 platform 要求,适合生产环境校验
- 加
-v:显示详细不匹配项,比如具体哪个扩展版本低于要求
- 加
--ignore-platform-reqs 不生效——这个参数对 platform-check 无效,它本身就不受该开关影响
- 不支持指定 PHP 版本模拟(如“假装我在 PHP 8.0 下运行”),它只检查真实环境
--no-dev:跳过 require-dev 中的 platform 要求,适合生产环境校验-v:显示详细不匹配项,比如具体哪个扩展版本低于要求--ignore-platform-reqs 不生效——这个参数对 platform-check 无效,它本身就不受该开关影响示例输出中看到类似 The requested PHP extension ext-xml is missing from your system.,说明 php-xml 扩展未启用,而非没安装——得去 php.ini 开启或重装带该模块的 PHP 包。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
为什么有时 platform-check 通过,但 composer install 仍失败
platform-check 只校验 platform 配置和扩展存在性,不校验以下内容:
- 实际扩展功能是否可用(例如
ext-curl 存在但被禁用 curl_setopt 函数)
- 系统级依赖(如
libpng 缺失导致 GD 扩展无法加载)
-
composer.lock 中已锁定的依赖与当前 platform 是否兼容(它只看 composer.json 声明)
- PHP ini 设置限制(如
memory_limit = 16M 导致解析大依赖图失败)
ext-curl 存在但被禁用 curl_setopt 函数)libpng 缺失导致 GD 扩展无法加载)composer.lock 中已锁定的依赖与当前 platform 是否兼容(它只看 composer.json 声明)memory_limit = 16M 导致解析大依赖图失败)也就是说:platform-check 通过只是“必要条件”,不是“充分条件”。真正要复现 CI 或生产行为,还得搭配 composer install --no-dev --ignore-platform-reqs(仅调试用)或完整重建目标环境。
platform-check 和 config platform 的配合要点
项目中常通过 "config": {"platform": {"php": "8.1.10"}} 锁定平台版本,让 Composer 在依赖解析时假装运行在该 PHP 版本下。但 platform-check **完全忽略该配置**——它只检查真实环境是否达标。
- 若你设了
config.platform.php,platform-check 仍会报告“当前 PHP 是 8.2,但项目要求 >=8.1”,这是正常且有用的提醒
- 若你用
config.platform 降级声明(比如设成 "php": "7.4"),platform-check 会报错,因为真实环境(8.2)不满足“必须是 7.4”——但这种写法本身反模式,应避免
- 真正需要的是:开发环境 PHP 版本 ≥
platform 声明,且所有 ext-* 按需启用;config.platform 仅用于解决“本地高版本、目标环境低版本”的兼容解析问题
config.platform.php,platform-check 仍会报告“当前 PHP 是 8.2,但项目要求 >=8.1”,这是正常且有用的提醒config.platform 降级声明(比如设成 "php": "7.4"),platform-check 会报错,因为真实环境(8.2)不满足“必须是 7.4”——但这种写法本身反模式,应避免platform 声明,且所有 ext-* 按需启用;config.platform 仅用于解决“本地高版本、目标环境低版本”的兼容解析问题最容易被忽略的一点:Dockerfile 中 RUN docker-php-ext-enable gd 必须在 composer platform-check 执行之前完成,否则检查永远失败——顺序错了,工具再准也没用。










