卡在resolving dependencies是dns或tcp层问题,非timeout配置能解决;需用dig/curl验证解析与连通性,换dns、绑hosts、确认镜像源生效,http.timeout和process-timeout在此阶段完全无效。

卡在 Resolving dependencies 是 DNS 或 TCP 层问题,不是 timeout 配置能解决的
看到这行输出就停住,说明 Composer 还没发任何 HTTP 请求,连域名解析都没完成。改 http.timeout 或 process-timeout 完全无效。
常见现象包括:Resolving dependencies 卡住几十秒、curl -v https://mirrors.aliyun.com/composer/packages.json 报 Resolving host 超时、或 dig packagist.org 返回超慢甚至空结果。
- 优先手动测 DNS:运行
dig mirrors.aliyun.com @114.114.114.114,若响应正常但系统默认 DNS 慢,临时改/etc/resolv.conf(Linux/macOS)或网络设置(Windows)为8.8.8.8或223.5.5.5 - 绕过 DNS 缓存:直接在
/etc/hosts或C:\Windows\System32\drivers\etc\hosts绑定镜像 IP,例如123.56.123.45 mirrors.aliyun.com - 确认镜像源已生效:运行
composer config -g repos.packagist.org.url,输出必须是https://mirrors.aliyun.com/composer/,不是packagist.org或已停用的旧地址
curl error 28 真实含义是 cURL 的 CURLOPT_TIMEOUT 触发,不是 PHP 执行超时
cURL error 28: Operation timed out after 300000 milliseconds 这类报错,本质是 cURL 底层的 CURLOPT_TIMEOUT 被触发,和 PHP 的 max_execution_time 或 set_time_limit() 无关。Composer v2 不暴露该参数直控接口,只能通过配置或环境变量间接影响。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
http.timeout最终会映射为 cURL 的CURLOPT_TIMEOUT,不是CURLOPT_CONNECTTIMEOUT—— 后者只管建连阶段,前者才管整个请求生命周期(DNS + TCP + TLS + HTTP body) - 全局设值:运行
composer config -g http.timeout 600(单位秒),适用于大多数国内弱网场景 - 临时覆盖优先级最高:执行前设环境变量
COMPOSER_HTTP_TIMEOUT=600,避免污染项目或全局配置 - 若仍失败且
-vvv最后几行出现error:14090086,说明是 TLS 握手卡住(如企业中间人代理未导入根证书),此时调高http.timeout无意义,得查证书链或禁用验证(仅限可信内网)
PHP CLI 的 default_socket_timeout 会干扰 Composer 的 HTTP 超时行为
Composer 基于 PHP 的 file_get_contents() 或 Guzzle(v2 默认),而这两者都受 PHP CLI 模式下的 default_socket_timeout 限制。即使你设了 http.timeout 600,若该 ini 值是 60,cURL 可能被底层 socket 强制中断。
- 查当前值:运行
php -i | grep default_socket_timeout,CLI 模式下常见值为 60 - 临时绕过:用
php -d default_socket_timeout=600 $(which composer) install启动 - 不建议永久改 php.ini,因会影响其他 CLI 脚本;CI 环境中更推荐用环境变量方式统一控制
- 注意:Docker 或 WSL 中若宿主机时间不同步,也会导致 TLS 握手在 socket 层卡死,表现为类似超时,先运行
date核对系统时间
镜像源不可用时,延长超时只是“耐心等失败”
换镜像源比调任何 timeout 参数都有效——90% 的“超时”其实是镜像节点响应延迟、同步滞后或临时不可达。盲目把 http.timeout 设到 3600,只会让命令 hang 得更久,却掩盖了真实问题。
真正要做的,是验证镜像是否真在工作:
- 手动测通:运行
curl -I https://mirrors.aliyun.com/composer/packages.json,看是否返回200 OK和合理Content-Length - 检查镜像状态页:阿里云镜像有公开健康检查页(
https://mirrors.aliyun.com/composer/health),腾讯云也有类似接口 - 备选方案:如果阿里云慢,立刻切到腾讯云
https://packagist.proxy.tencent.com/或中科大https://mirrors.ustc.edu.cn/composer/ - CI 环境中务必组合使用:镜像源 +
COMPOSER_HTTP_TIMEOUT=600+--prefer-dist,三者缺一不可










