composer check-platform-reqs仅校验composer.json中显式声明的php版本、ext-扩展及lib-库是否在当前cli环境中可用,不检查未声明依赖、web环境、运行时配置或代码实际调用,漏声明即漏检查。

composer check-platform-reqs 只检查你明确写在 composer.json 里的平台要求,不是“环境全盘扫描”,也不是“运行时兜底验证”——它只比对声明和当前 CLI 环境,漏声明 = 漏检查,拼错名 = 静默跳过。
check-platform-reqs 检什么:只读 require 和已安装包的 composer.json
它不看 PHP 运行时配置(如 disable_functions)、不查 Web SAPI(Apache/FPM)、不探测未声明的扩展调用(比如代码里写了 curl_init() 却没在 require 里写 "ext-curl": "*")。
实际检查项包括:
-
php版本号(来自require中的"php": "^8.2"或config.platform.php) -
ext-*扩展是否存在且已启用(如ext-gd、ext-redis) -
lib-*库版本(如lib-curl、lib-zip) - 所有已安装依赖包自身
composer.json里的平台约束(加--with-dependencies才触发)
为什么它有时“不准”:config.platform 和真实环境脱节
config.platform 是个模拟层,一旦设了 "php": "8.1.0",check-platform-reqs 就按这个验,完全无视你系统里 php -v 输出的是 8.2.12。
常见陷阱:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
config.platform.php写成"8.1"或"8.1.0"—— 后者会被当成精确版本,而php -v返回8.1.12就会报 mismatch -
config段落名打错,比如写成"platfrom"→ 命令静默忽略,不报错也不提醒 - 扩展名漏写
ext-前缀(如写"mbstring": "*"而非"ext-mbstring": "*")→ 直接跳过校验
怎么跑才反映真实风险:路径、参数、上下文缺一不可
必须在含 composer.json 的项目根目录执行,否则报 Could not find composer.json。Composer 不向上查找,也不读全局配置。
推荐组合:
- 上线前或 CI 中:用
composer check-platform-reqs --no-dev,排除require-dev干扰 - 查完整依赖链:加
--with-dependencies,它会递归读vendor/下每个包的composer.json - 确认 CLI 环境真实能力:先跑
composer show --platform,看输出的php、ext-zip等是否与你预期一致 - 别信 IDE 终端默认路径 —— 运行
ls composer.json确认存在再执行
它和 diagnose、show --platform 的关键区别
composer diagnose 只管 Composer 自己能不能启动:json 扩展有没有、CA 证书可不可读、packagist 能不能连;它完全不碰 require 里的 php 或 ext-redis。
composer show --platform 是“快照”,只输出当前 CLI 环境探测到的能力,不做任何比对;而 check-platform-reqs 是“比对”,拿这个快照去扣 composer.json 里的白名单。
最容易被忽略的一点:check-platform-reqs 默认不检查 require-dev,但很多项目把 phpunit、symfony/var-dumper 这类开发工具也当运行依赖用——它们可能悄悄引入了 ext-dom 或 ext-simplexml,不加 --with-dependencies 就发现不了。










