卡在Downloading https://时应调http.timeout,它控制DNS解析、TLS握手、首字节等待及完整body下载,默认300秒,弱网或大包建议设为600~1200;process-timeout与此无关。

直接改 process-timeout 和 http.timeout 两个配置,缺一不可——只调一个,大概率还是卡住。
卡在 Downloading https:// 该调哪个?
这是 HTTP 传输阶段卡住,错误里常带 cURL error 28 或反复 retry 后失败。它只响应 http.timeout,和 process-timeout 无关。
-
http.timeout控制整个 HTTPS 请求生命周期:DNS 解析、TLS 握手、首字节等待、完整 body 下载,单位秒,默认仅 300(5 分钟) - 弱网或拉大 ZIP 包(如 Laravel 完整 dist)时,建议设为 600~1200
- 项目级生效:
composer config http.timeout 600(写入当前composer.json的config段) - 全局生效:
composer config -g http.timeout 1200(写入~/.composer/config.json) - 临时覆盖优先级最高:
COMPOSER_HTTP_TIMEOUT=1200 composer install - ⚠️ 注意:
php -i | grep default_socket_timeout查出的 PHP CLIdefault_socket_timeout必须 ≥ 你设的http.timeout,否则底层 socket 会在 60 秒就掐断连接
报 The process timed out 该调哪项?
这是子进程执行超时,比如 git clone 私仓、unzip 解压几百 MB、或跑 post-install-cmd 脚本太久。错误一定含 [RuntimeException] The process "" exceeded the timeout。
-
process-timeout控制单个外部命令最大执行时间,默认 300 秒,和 HTTP 完全无关 - 项目级改:
composer config process-timeout 1800 - 全局改:
composer config -g process-timeout 1800 - 临时覆盖:
COMPOSER_PROCESS_TIMEOUT=1800 composer install或加参数--process-timeout=1800 - 设为 0 表示禁用超时,但不推荐长期使用——网络卡死时会无限挂起
Composer 2.2+ 用户注意细粒度控制
旧版本只能靠 http.timeout 和 process-timeout 硬扛;2.2+ 新增 http-basic-timeout,专管单次 GET 的连接 + 读取(比如拉 packages.json 或 ZIP 包头几 KB)。
- 它和
http.timeout是并行关系,不是替代关系 - 若卡在拉小文件(如 metadata)就超时,优先调高
http-basic-timeout(默认仅 60 秒) - 命令示例:
composer config -g http-basic-timeout 300 - 临时覆盖:
composer update --http-basic-timeout=300
真正容易被忽略的是:单纯加 timeout 只解决“等多久”,不解决“连不上”。国内用户必须配镜像源,否则调再大 timeout 也白搭;另外,http.timeout 和 process-timeout 必须同时检查,缺一不可。


















