Composer diagnose 检查7类基础状态:PHP版本与扩展、openssl、curl、zip、git路径、github.com连通性、composer.json存在且可读;不校验JSON结构、autoload冲突或vendor文件完整性。

Composer diagnose 命令能快速暴露本地环境的常见配置问题,但默认只检查基础项,很多关键隐患它压根不报——比如 composer.json 语法合法但结构错乱、插件冲突、或 vendor/ 权限异常,这些得靠人眼+经验补位。
diagnose 命令到底检查哪些东西
它不是万能扫描器,而是按固定顺序验证 7 类基础状态:PHP 版本与扩展、openssl 是否可用、curl 配置、zip 扩展、git 命令路径、github.com 连通性、以及 composer.json 是否存在且可读。每项通过显示 OK,失败则标红并提示原因。
常见错误现象包括:curl: (60) SSL certificate problem(证书路径未配置)、Could not open input file: composer.phar(权限不足或路径错)、PHP Warning: require(): Failed opening required 'autoload.php'(vendor/ 损坏但 diagnose 不报)。
实操建议:
- 运行前先确认当前目录下有
composer.json,否则诊断会跳过依赖相关检查 - 若提示
openssl不可用,别急着重装 PHP,先查php -m | grep openssl和php --ini看配置是否加载了extension=openssl - 对 CI/CD 环境,加
-v参数(composer diagnose -v)能看到更细的 curl 超时和 DNS 解析过程
diagnose 不报错 ≠ 环境没问题
它不校验 composer.json 的 schema 合法性(比如 require 字段写成字符串而非对象)、不检测已安装包的 autoload 冲突、也不管 vendor/ 下文件是否被意外修改。一个典型的“假阴性”场景是:diagnose 全绿,但 composer install 却卡在 Generating autoload files —— 很可能是某个包的 autoload 配置引用了不存在的路径。
实操建议:
- 用
composer validate补检composer.json结构(支持--no-check-all跳过远程包验证) - 怀疑 autoload 问题时,手动执行
php vendor/autoload.php,看是否直接 fatal error - CI 中建议把
composer diagnose和composer validate --strict串成一条命令,避免漏掉语义错误
如何让 diagnose 更有用
原生命令输出太简略,真正要定位问题,得配合其他工具交叉验证。比如 diagnose 报 github.com 不通,不能只信它,要立刻跑 curl -I https://api.github.com 和 git ls-remote https://github.com/composer/composer.git HEAD 看是网络层、DNS 层还是 Git 凭据层的问题。
实操建议:
- 加
--profile参数(composer diagnose --profile)会输出耗时,帮你识别慢在哪一步(比如 DNS 查询花了 3s) - 遇到代理环境,确保
HTTP_PROXY和HTTPS_PROXY环境变量已设,否则 diagnose 可能误判为网络不可达 - Windows 用户注意:PowerShell 默认禁用脚本执行策略,
composer diagnose若报错退出码 1 且无文字提示,先试 cmd.exe 再排查
真正卡住人的往往不是 diagnose 报出的错误,而是它沉默跳过的那些边界情况:比如 composer.lock 时间戳早于 composer.json、vendor/bin 被加入 $PATH 但实际没生成对应二进制、或者某次 composer update 中断后残留的 composer.json~ 备份文件干扰解析。这些没法靠一条命令覆盖,得结合日志、时间线和最小复现来推。











