卡在downloading https://时应调http-basic-timeout,该参数控制单次http请求的连接与读取总时间,默认仅60秒,弱网下易触发;需同步确保php的default_socket_timeout不小于该值。

Composer并发下载超时根本不是并发问题
Composer 默认根本不支持真正意义上的并发下载——它的 HttpDownloader 底层用的是 PHP 的 stream_context_create,没有原生多线程或异步 I/O 支持。所谓“并发”只是指内部任务队列最多可并行处理 $maxJobs=12 个 HTTP 请求(仅限 Composer 2.2+),但每个请求仍受 http-basic-timeout 和 PHP 的 default_socket_timeout 双重掐断。卡在 downloading 阶段,99% 是超时配置没对上,不是并发不够。
卡在 Downloading https:// 时该调 http-basic-timeout,不是 process-timeout
错误里带 cURL error 28、反复 retry 或直接报 Connection timed out,说明是单次 HTTP 请求(比如拉某个包的 ZIP)在连接建立或首字节等待阶段就失败了。这时候:
-
process-timeout不起作用——它只管git clone、unzip这类子进程,不管 HTTP 流量 - 必须调
http-basic-timeout:控制每个 GET 请求的连接 + 读取总时间,默认仅 60 秒,弱网下极易触发 - 该参数仅 Composer 2.2+ 支持;旧版本只能靠
--timeout全局兜底,但效果差 - 临时生效:
composer install --http-basic-timeout=300 - 永久生效:
composer config -g http-basic-timeout 300(写入~/.composer/config.json)
process-timeout 才是真正卡住 git clone 的元凶
当依赖里有 "type": "git" 的包(比如 "laravel/framework": "dev-main"),Composer 会调系统 git clone。这个过程不走 HTTP 下载器,而是起子进程,此时:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
http-basic-timeout完全无效 - 真正起作用的是
process-timeout(默认 300 秒),它限制整个git clone命令最长能跑多久 - Git 自身无内置超时,若 DNS 卡住或 SSH 握手失败,就会等满
process-timeout后被 Composer 杀掉 - 推荐设为
1800(30 分钟):composer config -g process-timeout 1800 - 同时确保 PHP 的
default_socket_timeout≥ 你设的http-basic-timeout,否则底层 socket 会提前断开
换镜像和禁用回源比加 timeout 更治本
单纯调高超时只是“等得更久”,不能解决 DNS 解析慢、TLS 握手延迟、CDN 路由绕行这些国内直连 packagist.org 的固有瓶颈:
- 阿里云镜像最稳:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 必须禁用 packagist.org 回源(否则镜像失效):
composer config -g repos.packagist.allow-plugins false(Composer 2.2+)或手动删掉composer.json里的冗余repositories字段 - 对含私有 Git 仓库的项目,镜像不代理它们——要单独配 Git 超时:
git config --global core.sshCommand "timeout 300 ssh"(Linux/macOS) - 强制走 HTTPS 协议避免 SSH 认证卡死:
composer config -g github-protocols https
最容易被忽略的是:PHP 的 default_socket_timeout 和 Composer 的 http-basic-timeout 必须匹配,且前者不能更小;否则无论你怎么调后者,socket 层早被掐断了。










