卡在Downloading应调http-basic.timeout,它控制DNS解析、TLS握手、首字节等待及body传输总时长,默认300秒易超时;卡在Resolving dependencies则是DNS或镜像问题,与timeout无关。

Composer install/update 卡在 downloading 或 hanging 怎么办
默认情况下,Composer 的 HTTP 请求超时是 300 秒(5 分钟),遇到网络慢、镜像响应延迟或大包下载时,很容易触发 Connection timeout 或直接卡住不动。这不是报错,而是静默等待超时,容易误判为“卡死”。
用 config 命令全局或项目级修改 timeout 值
最直接的方式是通过 composer config 设置 process-timeout 和 http-basic.timeout —— 注意这两个参数作用不同,别混用:
-
process-timeout控制的是整个命令(如composer install)的总执行时长,单位是秒,默认 300;设为0表示禁用超时(慎用) -
http-basic.timeout是 Composer 1.10+ 引入的,专用于 HTTP 下载请求的 socket 超时,单位是秒,默认也是 300;它比process-timeout更精准,推荐优先调这个
示例(项目内设置):
composer config http-basic.timeout 600 composer config process-timeout 0
若想全局生效(影响所有项目),加 -g 参数:
composer config -g http-basic.timeout 600
timeout 不起作用?检查是否被其他配置覆盖
Composer 会按顺序合并以下配置源,后加载的会覆盖前面的:
- 系统级:
COMPOSER_HOME/config.json(即composer config -g写入的位置) - 项目级:
./composer.json中的config字段 - 命令行传参:如
composer install --timeout=1200(仅本次生效)
常见坑:
- 项目
composer.json里写了"process-timeout": 300,但你在命令行改了全局配置——没用,项目级优先级更高 - 用了国内镜像(如阿里云、腾讯云),但镜像本身响应慢或限流,此时加 timeout 只是“等得更久”,未必能成功;建议同时确认镜像可用性:
curl -I https://mirrors.aliyun.com/composer/ - PHP 的
max_execution_time或default_socket_timeout也会干扰,尤其在共享主机或 Docker 环境中;可临时检查:php -r "echo ini_get('default_socket_timeout');"
临时延长 timeout 的快捷方式(适合 CI/部署场景)
不需要改配置文件时,直接用命令行参数最稳妥:
composer install --timeout=1200 composer update --timeout=1800
注意:--timeout 参数只控制 process-timeout,不改变 HTTP socket 层超时;如果问题出在下载阶段(比如卡在 Downloading https://.../package.zip),还是得靠 http-basic.timeout 或调整 PHP 底层设置。
真正卡住的时候,先 Ctrl+C 中断,再看最后一行日志是停在 “Resolving dependencies” 还是 “Downloading”,这决定了该调哪个 timeout。


















