“could not resolve host”或“curl error 7/35”本质是系统未连通目标域名,需逐层排查dns、tcp、tls:ping判dns,curl -i判tcp,成功后install卡住则为tls握手失败。

“Could not resolve host”或“cURL error 7/35”不是 Composer 配错了,而是系统根本没连上目标域名——得跳过 Composer 层,直接查 DNS、TCP、TLS 这三层。
怎么用 ping 和 curl 快速定位卡在哪一层
Composer 报错里带 Could not resolve host 或 Connection refused,说明请求压根没发出去。别急着改 composer.json,先跑两行命令:
-
ping packagist.org:返回unknown host→ DNS 解析失败,立刻换 DNS(比如nameserver 8.8.8.8写进/etc/resolv.conf) -
curl -I https://mirrors.aliyun.com/composer/packages.json:卡住或报Failed to connect→ TCP 连接被拦截(防火墙、HTTPS 解密代理、企业策略都可能干这事) - 如果
curl成功但composer install卡在Loading composer repositories,大概率是 TLS 握手失败,不是网络慢,是证书或 OpenSSL 版本问题
为什么 composer diagnose 显示 OK 却 install 失败
composer diagnose 只对 https://packagist.org 发一次 HTTP HEAD 请求(走 80 端口),不读你的镜像配置,也不走 TLS。它通过 ≠ 你实际要用的链路通。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 你配了阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/,但diagnose仍硬连官方源,完全不生效 - 真正验证镜像是否可用,该用:
composer show -p | head -5,或直接curl -I https://mirrors.aliyun.com/composer/packages.json - 想看 Composer 实际请求哪条 URL?加
-vvv:composer install -vvv 2>&1 | grep Downloading,第一行就是它真正在连的地址
镜像 URL 配错、缓存没清、项目级配置覆盖,三者最容易静默失效
配完镜像还报错,90% 是因为缓存或优先级搞错了,而不是镜像本身不可用:
- URL 必须以
/结尾:https://mirrors.aliyun.com/composer/✅,少斜杠会拼成/composerpackages.json导致 404 - 键名必须是
repo.packagist(不是repos.packagist,也不是repositories),且显式传入composer作为 type 值 - 执行
composer clear-cache—— Composer 2.9.6+ 不清缓存,它可能还在用旧地址 - 检查项目级是否覆盖:
composer config repo.packagist(不加-g);如果输出非空,composer.json里的repositories就会优先生效,全局配置被无视
SSL 握手失败和 IPv6 fallback 是最隐蔽的卡点
报 cURL error 35 或卡在 Loading composer repositories,大概率不是网络慢,而是 OpenSSL 拒绝握手:
- 运行
php -r "print_r(openssl_get_cert_locations());",盯紧default_cert_file和ini_cafile:路径是否存在?文件大小是否 ≤10KB?(太小说明是空包或陈旧 bundle) -
php.ini中必须同时配齐curl.cainfo和openssl.cafile,且指向同一cacert.pem文件(绝对路径),只改一个等于没配 - IPv6 fallback 会导致“无响应”假象:运行
curl -v https://packagist.org 2>&1 | grep "Connected to",看到2a03:2880:这类 IPv6 地址且后续卡住,就基本确认了。临时绕过:CURL_IPRESOLVE=4 composer install
真正难排查的从来不是错误信息本身,而是你以为在调 Composer,其实是在调 DNS、OpenSSL、curl 和系统代理——它们各自有一套规则,且互不报错。










