Composer diagnose 检查 PHP 配置(如 allow_url_fopen、openssl 扩展)、网络连通性(访问 packagist.org)、权限(vendor/ 和 composer.json 目录写权限)、GitHub 限流、磁盘空间及 Composer 版本兼容性,不检测项目代码逻辑或依赖问题。

Composer diagnose 会检查哪些基础环境配置
它不跑项目代码,只验证 Composer 自身运行依赖的底层环境是否就绪。核心是确认 PHP 配置、网络连通性、权限和关键扩展是否存在——不是查你的项目 bug,而是查 Composer 能不能正常工作。
-
php.ini中allow_url_fopen是否开启(影响包下载) - 是否加载了
openssl扩展(HTTPS 包源必需) - 当前用户对
vendor/和composer.json所在目录是否有写权限 - 能否成功访问
https://repo.packagist.org(默认 Packagist 源) - PHP 版本是否满足当前 Composer 版本的最低要求(如 Composer 2.x 要求 PHP ≥7.2)
常见报错对应的真实问题
输出里带 [FAIL] 的条目,基本就是卡点所在。比如:
Checking composer.json: FAIL —— 很可能是 composer.json 格式错误,或用了不支持的语法(如顶层加了注释、字段名拼错);也可能是文件权限为只读,Composer 读不到内容。
Checking HTTP proxy: FAIL —— 当前设置了 HTTP_PROXY 或 HTTPS_PROXY 环境变量,但代理不可达或认证失败;或者你根本没配代理却误启了代理模式。
Checking github.com rate limit: FAIL —— GitHub API 限流触发(未登录时每小时 60 次),不是 Composer 本身问题,但会导致 create-project 或某些包元数据拉取失败。
diagnose 不会检测但你常遇到的问题
它不管项目逻辑、依赖冲突、autoload 错误或脚本执行失败。例如:
-
composer install报Class not found?diagnose不管 autoload 配置是否生效 -
require某个包提示could not find a matching version?它不校验 Packagist 上是否存在该版本 - 本地
composer.lock和远程不一致导致部署失败?diagnose不比对 lock 文件 - 用了自定义仓库(如私有 Satis / Private Packagist)但无法连接?它默认只测官方源
$ composer diagnose Checking platform settings: OK Checking git settings: OK Checking http connectivity to packagist: OK Checking https connectivity to packagist: OK Checking github.com rate limit: OK Checking disk free space: OK Checking pubkeys: Tags Public Key Fingerprint: 57815BA2 7E54DC31 7ECC7CC5 573090D0 87719BA6 8F3BB723 4E5D42D0 84A14642 Dev Public Key Fingerprint: 4AC45767 E5EC2265 2F0C1167 CBBB8A2B 0C708369 153E328C AD90147D AFE50952 OK Checking composer version: OK
真正卡住的时候,别只盯着 diagnose 的 OK/FAIL,重点看它具体哪一行失败、失败信息里提到的路径或命令能不能手动复现——比如直接 curl -I https://repo.packagist.org/packages.json,比反复跑 diagnose 更快定位是 DNS、防火墙还是 CA 证书问题。









