composer check-platform-reqs 是最直接、最可靠的检查方式,它不安装包,仅通过 phpversion()、extension_loaded()、ini_get() 等原生函数,精准校验当前 php cli 环境(版本、扩展、ini 设置)是否满足 composer.json 中 require 和 config.platform 的显式声明,结果与运行时完全一致。

composer check-platform-reqs 是最直接、最可靠的检查方式——它不安装包,只校验当前 PHP 环境(含扩展、版本、INI 设置)是否满足 composer.json 中声明的 platform 和 require 约束。
为什么不用 composer install 或 composer update 来判断?
这两个命令会尝试解析依赖、下载包、写锁文件,甚至触发脚本;一旦环境不满足,错误信息常被依赖冲突或网络问题掩盖,真正缺失的扩展反而藏在几百行日志末尾。而 check-platform-reqs 专注平台层,输出干净、定位精准。
- 它只读取
composer.json的require(如"php": "^8.1")、config.platform(如强制指定"ext-gd": "8.1.0"),不查 Packagist - 它调用
phpversion()、extension_loaded()、ini_get()等原生函数,结果和运行时完全一致 - 若项目定义了
config.platform.php,该命令会按此值校验,而非你本地实际 PHP 版本——这点极易误判
check-platform-reqs 的常见报错含义
执行后若失败,典型输出类似:
ext-mbstring is missing, required by composer.json
这类提示不是警告,是硬性失败项。注意几个关键点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
ext-xxx表示 PHP 扩展,需确认是否已启用(php -m | grep mbstring),而非仅安装 -
lib-xxx(如lib-curl)通常指系统级库,check-platform-reqs实际不检测它——这类条目常是历史遗留或误配,可删掉或忽略 - PHP 版本不匹配时,错误形如
php (7.4.33) does not satisfy php ^8.1,此时看php -v和composer.json的require.php是否对齐 - 若用 Docker,务必在容器内运行该命令,宿主机的
php -v结果无参考价值
配合 config.platform 使用的陷阱
有些项目为兼容 CI 或旧环境,在 composer.json 中写了:
"config": { "platform": { "php": "7.4.33" } }
这时 check-platform-reqs 会严格按 "7.4.33" 校验——哪怕你本地是 PHP 8.2,也会报错“PHP version too high”。这不是 bug,是设计行为。
- 临时绕过:加
--no-platform-check参数(但仅跳过平台检查,不解决真实兼容性) - 长期修复:删掉
config.platform.php,让 Composer 按真实环境判断;或改用更宽泛的约束,如"^7.4 || ^8.0" - CI 场景下,建议显式设置
COMPOSER_PLATFORM_CHECK=0并手动验证扩展,避免被platform锁死
真正容易被忽略的是:这个命令不会检查扩展的**功能子集**。比如 ext-gd 已加载,但编译时没带 WebP 支持,某些图像操作仍会失败——check-platform-reqs 无法发现这种深度缺失。










