卡在Resolving dependencies时应排查DNS而非调http.timeout;卡在Downloading时才调http.timeout和http-basic-timeout;process-timeout用于子进程超时;换国内镜像源并同步调高PHP default_socket_timeout才治本。

超时不是网络“不通”,而是 Composer 默认阈值太低,必须分场景调不同参数,否则改了也白改。
卡在 Resolving dependencies 时别碰 http.timeout
这一步只做 DNS 解析,不走 HTTP、不读代理、不认超时配置。常见现象是卡住不动或报 cURL error 7、Connection refused。
- 先验证 DNS:运行
dig mirrors.aliyun.com @8.8.8.8,看是否返回有效 IPv4 地址 - 检查
/etc/hosts(Linux/macOS)或C:\Windows\System32\drivers\etc\hosts(Windows),确认没把mirrors.aliyun.com指向127.0.0.1或错误 IP - 临时换 DNS:Linux/macOS 编辑
/etc/resolv.conf加nameserver 8.8.8.8;Windows 在网络适配器里手动设 - 手机热点试一次——很多企业网会屏蔽 packagist.org 域名,但热点通常直连通畅
卡在 Downloading https:// 时该调 http.timeout 和 http-basic-timeout
这是真正发 HTTP 请求的阶段,http.timeout 控制整个请求生命周期(DNS + TLS + 首字节 + body 传输),http-basic-timeout 控制单次 HTTP 连接/读取时限(Composer 2.2+ 才支持)。
- 项目级最稳:运行
composer config http.timeout 600和composer config http-basic-timeout 300,写入当前composer.json的config段 - 全局生效:用
composer config -g http.timeout 600和composer config -g http-basic-timeout 300,写入~/.composer/config.json - 临时覆盖优先级最高:
COMPOSER_HTTP_TIMEOUT=1200 COMPOSER_HTTP_BASIC_TIMEOUT=600 composer install - 注意:
php -i | grep default_socket_timeout查出的 PHPdefault_socket_timeout若低于你设的http.timeout,会提前掐断连接——常见值是 60,务必同步调高
The process timed out 错误该调 process-timeout
这是子进程执行太久被杀,比如 git clone、unzip、跑 post-install-cmd 脚本。错误里一定含 [RuntimeException] The process "" exceeded the timeout,加 -vvv 可看到最后那条命令。
- 全局改:运行
composer config -g process-timeout 1800(30 分钟),写入~/.composer/config.json - 项目级改:直接在
composer.json顶层加"config": {"process-timeout": 1200} - CI 环境建议用环境变量兜底:
COMPOSER_PROCESS_TIMEOUT=2000,某些 Composer 版本对它更敏感 - 设为 0 表示不限时,但不推荐——万一远程 Git 仓库彻底不可达,会无限挂起
换镜像源比调 timeout 更治本
单纯延长超时只是“等得更久”,不能解决网络不稳定问题。国内用户应优先切阿里云或腾讯云镜像,并关闭 packagist.org 回源。
- 全局换源(推荐阿里):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 禁用 fallback(防拖慢):
composer config -g repo.packagist false - 换源后必须执行
composer clear-cache,否则旧缓存仍会复用失败地址 - 验证是否生效:
composer config -g repo.packagist输出必须是完整 JSON,如{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"} - 注意 URL 必须带末尾斜杠:
https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌
最容易被忽略的是:DNS 问题和 PHP 底层 socket 超时会覆盖 Composer 配置,哪怕你把 http.timeout 设成 3600,default_socket_timeout 是 60,照样 60 秒就断。











