composer diagnose 检查 composer.json 语法、本地 ca 证书、openssl/curl 扩展启用状态,以及 packagist 和 github api 连通性,不检查 php 版本或网络硬件。

composer diagnose 命令到底检查什么
composer diagnose 不是万能体检仪,它只做几件明确的事:验证 composer.json 语法、检查本地 CA 证书是否可用、确认 openssl 和 curl 扩展是否启用、测试能否访问 Packagist(默认 https://packagist.org)和 GitHub 的 API 端点。它不查 PHP 版本兼容性,也不验你家路由器信号强不强。
常见错误现象包括:curl error 60(证书问题)、Could not open input file: composer.phar(命令没找到)、或卡在 Checking github.com rate limit(网络不通或被限流)。
- 它默认用系统级
curl和 PHP 的openssl,不是 Composer 自带的 HTTP 客户端 - 如果项目根目录下没有
composer.json,它会报错退出,而不是跳过 - 检查 GitHub 限流时依赖
GITHUB_TOKEN环境变量;没配的话可能误报“rate limit exceeded”
为什么 diagnose 经常报 curl error 60
这个错误几乎全是证书链问题——PHP 的 openssl 找不到可信 CA 证书,尤其在 macOS(M1/M2)、Windows WSL 或某些 Docker 镜像里高频出现。
不是 Composer 配置错了,也不是你网络被墙,而是 PHP 不知道该信谁。
- 先运行
php -r "print_r(openssl_get_cert_locations());"看default_cert_file路径是否存在、可读 - 若路径为空或文件不存在,手动下载 Mozilla CA 包:用
curl -o /usr/local/etc/openssl/cert.pem https://curl.se/ca/cacert.pem(路径按上一步输出调整) - 再在
php.ini里加一行openssl.cafile=/usr/local/etc/openssl/cert.pem,然后重启 PHP 进程 - 别用
composer config -g cafile——那只是给 Composer 的 HTTP 客户端用,diagnose不走这条路
diagnose 在 CI/CD 或 Docker 里为啥总失败
CI 环境(如 GitHub Actions、GitLab CI)或最小化 Docker 镜像(alpine、scratch)里,diagnose 往往因缺失依赖直接崩,比如没装 curl、没开 openssl 扩展、或 DNS 解析失败。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
它不像 composer install 那样有 fallback 机制,一检测失败就 exit 1。
- Alpine 镜像必须先
apk add curl openssl,且确保 PHP 编译时带--with-openssl - GitHub Actions 默认 Ubuntu 镜像没问题,但自定义 runner 若禁用了 IPv6,可能卡在
github.com解析——加echo 'options single-request-reopen' >> /etc/resolv.conf临时修复 - 别在
composer diagnose后面跟&& composer install——诊断失败时整个流程中断,不如单独跑、看日志再决定是否继续
想跳过某项检查?不行,但可以绕过
composer diagnose 没有 --skip-github 或 --no-ssl 这类开关。所有检查硬编码在逻辑里,不能关。
但你可以用环境变量临时干预行为:
- 设
COMPOSER_NO_INTERACTION=1防止交互式提示干扰自动化流程 - 设
HTTPS_PROXY=http://127.0.0.1:8080(如果你真有代理)让检查走代理通道 - 想跳过 Packagist 连通性测试?删掉
composer.json里的repositories配置,或临时改"packagist.org": false到config.repositories——但注意这会影响后续 install
最常被忽略的是:diagnose 的输出里有一行 Checking composer.json: OK,但如果 JSON 里用了注释、尾逗号或引用了未定义的变量(如 ${env:FOO}),它照样报错——而这类写法在 install 时可能被悄悄忽略。










