Composer怎么检查环境要求_Composer check-platform-reqs用法【常用】

2次阅读

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

Composer怎么检查环境要求_Composer check-platform-reqs用法【常用】

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 顶层的 requireconfig.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),也会误报为缺失。

text=ZqhQzanResources