Composer默认超时时间是300秒,其中process-timeout控制git clone等子进程,http.timeout控制HTTP下载;两者默认均为300秒,但作用域不同,需根据卡点阶段分别调整。

Composer 默认超时时间是多少
Composer 默认的网络请求超时是 300 秒(5 分钟),这个值体现在 process-timeout 和 http.timeout 两个配置项上,但作用范围不同:process-timeout 控制的是 shell 命令类操作(如 git clone)的最长等待时间;http.timeout 才真正影响 HTTP 下载包元数据或 ZIP 包时的 cURL 超时。
查看当前生效的超时配置
运行以下命令可列出所有显式设置的配置,包括全局和项目级:
composer config --list
重点关注这两行输出:
-
process-timeout:默认300,若为0表示禁用超时(不推荐) -
http.timeout:默认未显式设置,此时走 cURL 底层默认值(通常也是 300 秒),但只有你手动设过才会出现在--list输出里
要确认 http.timeout 实际是否生效,可以临时加 -v 运行一个 install/update,观察日志里 cURL 初始化时打印的 timeout=xxx 参数。
为什么改了 http.timeout 没效果
常见原因有三个:
- 配置写在了错误作用域:用
composer config http.timeout 600默认只写入当前项目composer.json;想全局生效得加-g参数:composer config -g http.timeout 600 - PHP 的
max_execution_time限制更低:即使 Composer 设置了 600 秒,如果 PHP 配置里max_execution_time = 30,脚本会在 30 秒后被中止——这时你会看到PHP Fatal error: Maximum execution time of 30 seconds exceeded - 某些代理或防火墙主动断连:超时表现是
cURL error 56: Failure when receiving data from the peer,这和配置无关,需检查网络环境
临时覆盖超时参数的可靠方式
不想改配置文件时,最直接的办法是用环境变量:
COMPOSER_PROCESS_TIMEOUT=600 COMPOSER_HTTP_TIMEOUT=600 composer update
注意两点:
- 这两个变量名必须全大写、带
COMPOSER_前缀,小写或缺前缀都不生效 - 它们优先级高于配置文件,且只对当次命令有效,适合调试或 CI 场景
实际中,http.timeout 在国内镜像源场景下调高意义不大,真正卡住的往往是 git clone 阶段——这时候起作用的是 process-timeout,而不是 HTTP 超时。


















