check-platform-reqs 是只读平台依赖检查工具,用于验证本地 php 环境与 composer.json 中声明的 php 版本、扩展等是否匹配,不安装不修复,仅提前暴露不兼容问题。

composer check-platform-reqs 不是用来“安装”或“修复”问题的命令,它只是个只读检查工具——它不会改任何东西,也不会自动解决不匹配,但它能提前暴露你本地 PHP 环境和 composer.json 中声明的平台依赖(比如 php、ext-mbstring、ext-pdo_mysql)是否对得上。
为什么 check-platform-reqs 会报错但 install 却能过?
因为 composer install 默认跳过平台约束检查(除非你加了 --ignore-platform-reqs 或配置了 platform-check),而 check-platform-reqs 是专门用来强制验证的。常见现象:
- 本地
php -v显示 8.2,但composer.json写了"php": "^8.3"→check-platform-reqs直接标红失败 - PHP 编译时没启用
ext-redis,但项目 require 了predis/predis并在platform里声明了"ext-redis": "*"→ 检查报ext-redis missing - Docker 容器里 PHP 版本对,但宿主机运行
check-platform-reqs时用的是 Mac 自带的 PHP 7.4 → 结果完全不可信
check-platform-reqs 的实际使用场景
它适合出现在 CI 流程、部署前校验、或者团队新成员初始化环境后快速确认。不是每次开发都要跑,但关键节点值得加:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- CI 中放在
composer install前:避免因环境不一致导致后续命令中途失败 - 交接项目时,让同事在
git clone后立刻执行,比等php artisan serve报Class mb_convert_encoding not found更早发现问题 - 升级 PHP 大版本后,批量验证所有老项目是否还满足平台要求
- 配合
--no-dev使用:只检查生产环境需要的扩展,忽略require-dev里的测试工具依赖
怎么让 check-platform-reqs 更准?注意这几点
这个命令默认读取当前目录下的 composer.json,并按其中 config.platform 和 require 里带 ext-/lib- 前缀的条目做比对。容易踩的坑:
-
config.platform如果手动锁死了"php": "8.1.0",但你本地是 8.1.23 → 它会当作不匹配(即使语义上兼容),建议用"^8.1"或删掉 platform 锁定,靠真实环境检测 - 某些扩展名大小写敏感:
ext-intl不能写成ext-INTL,否则检查会忽略 - Windows 下如果 PHP 是通过 XAMPP 安装的,
php --ini可能加载了错误的php.ini,导致check-platform-reqs看不到已启用的扩展 —— 运行前先确认php -m | grep mbstring - 它不检查扩展的版本号(如
ext-pdo_pgsqlv1.1 vs v1.2),只判断是否加载成功;若需版本级控制,得靠扩展自身的 API 检测逻辑(比如在代码里extension_loaded('gd') && version_compare(phpversion('gd'), '2.3.0', '>='))
真正麻烦的从来不是命令会不会用,而是平台依赖藏在 composer.json 里、扩展开关藏在某个 php.ini 里、PHP 版本又可能被 phpbrew 或 asdf 切换着 —— 所以每次看到 check-platform-reqs 报错,别急着搜解决方案,先 which php、php -v、php -m 三连,把“到底在用哪个 PHP”这件事钉死。










