Composer diagnose 不执行安装或更新,仅静态校验PHP环境、openssl、git、CA证书、临时目录权限等,关键在WARNING而非OK,如CA证书未识别会标WARNING导致cURL error 60。

Composer diagnose 能快速暴露本地环境配置问题,但它的输出常被误读为“一切正常”——其实多数故障根源就藏在它提示的「警告」里。
diagnose 命令到底检查什么
它不运行安装或更新,只做静态环境校验:PHP 版本与扩展、openssl 配置、git 可执行性、CA 证书路径、临时目录权限、HTTP 代理设置等。重点不是“是否通过”,而是“哪项被标为 warning”。
常见误判场景:
- 显示
OK但实际composer install报cURL error 60→ 实际是 CA 证书未被正确识别,diagnose只会标WARNING不报错 - 显示
WARNING“The openssl extension is missing” → 却能跑通部分包下载 → 因某些镜像走 HTTP(不校验证书),但私有包仓库必然失败
如何解读 diagnose 的关键输出项
逐行看比扫一眼更有效。重点关注带 WARNING 或 NOTICE 的行,它们才是真线索:
-
Checking composer.json: OK→ 仅校验 JSON 格式,不验证require是否合法或版本是否存在 -
Checking platform settings: OK→ 若此处标 WARNING,说明 PHP 版本/扩展不满足composer.json中config.platform.php或包的require.php -
Checking git settings: OK→ 若为 WARNING,大概率是git config --global http.sslverify被设为false,或git命令不在$PATH -
Checking http connectivity to packagist: OK→ 这个“OK”只代表能连上packagist.org的 HTTP 端口(80),不代表 HTTPS(443)或私有仓库通
诊断后必须手动验证的三件事
diagnose 不代替真实操作。以下三步缺一不可:
- 运行
composer clear-cache→ 缓存损坏时,diagnose仍显示 OK,但后续命令卡在“Resolving packages…” - 用
curl -I https://packagist.org/packages.json测试 HTTPS 连通性 → 绕过 Composer 封装,确认系统级 SSL 根证书是否生效 - 检查
composer config -g cafile输出 → 若为空,且系统 CA 路径异常(如 Alpine Linux 的/etc/ssl/certs/ca-certificates.crt),需手动设置:composer config -g cafile /etc/ssl/certs/ca-certificates.crt
为什么 diagnose 在 CI 环境里容易失效
CI(如 GitHub Actions)默认不加载用户 shell 配置,diagnose 显示 OK,但实际 composer install 失败,原因通常是:
-
openssl.cafile未在php.ini中显式配置,而diagnose依赖 PHP 自动探测,CI 镜像常返回空值 -
git存在但未配user.name/user.email→diagnose不检查,但composer install拉取 VCS 包时会中断 - 使用
--no-interaction模式时,diagnose不触发代理认证弹窗,掩盖了凭据缺失问题
真正要盯住的,从来不是 OK,而是那一行没被展开解释的 WARNING —— 它往往指向你跳过的系统配置细节。


















