composer报timeout,90%非真断网,需用-vvv看卡点:卡在resolving dependencies是dns或源不可达,http.timeout无效;卡在downloading才调http.timeout;卡在executing command则改process-timeout。

Composer 装包报 timeout,90% 不是网络真断了,而是卡在某一层没发请求、或发了但等不及响应——必须用 -vvv 看最后一行停在哪,再对症改参数,否则调错配置纯属白等。
卡在 Resolving dependencies 就不动?DNS 或源不可达,http.timeout 完全无效
这一步 Composer 还没发任何 HTTP 请求,只在查域名 IP。改 timeout 没用,得先确认基础连通性:
- 运行
dig mirrors.aliyun.com @114.114.114.114,看是否能解析出 IP;若返回空或超时,立刻换 DNS - 手动测试镜像可用性:
curl -I https://mirrors.aliyun.com/composer/packages.json,返回200 OK才算真正通 - 检查镜像是否生效:
composer config -g repos.packagist.org.url输出必须是https://mirrors.aliyun.com/composer/(末尾斜杠不能少) - Windows 用户注意 hosts 文件是否误写了
packagist.org的错误 IP,Linux/macOS 查/etc/hosts
卡在 Downloading https://… 并报 cURL error 28?该调 http.timeout 和 http.connect-timeout
这是真正的 HTTP 层超时,http.timeout 控制单次请求从 DNS 开始到收到响应头的总时间,默认仅 60 秒,国内环境明显不够:
- 全局设值:
composer config -g http.timeout 600(单位秒),同时建议同步设http.connect-timeout 60 - 项目级更稳妥(尤其 CI):
composer.json的config段加"http": { "timeout": 600 } - 临时覆盖优先级最高:
COMPOSER_HTTP_TIMEOUT=600 composer install - 注意:
php.ini的default_socket_timeout对 Composer 1.10+ 无效;但 CLI 模式下若它被设成 60,可临时绕过:php -d default_socket_timeout=600 $(which composer) install
卡在 Executing command 或报 The process timed out?该动 process-timeout 或 COMPOSER_PROCESS_TIMEOUT
这时候包已下载完,Composer 正在解压、git clone、跑 post-install-cmd —— 这些都走子进程,和网络下载无关:
- 错误里带
[RuntimeException] The process timed out,且-vvv最后一行明确停在某条命令(如git clone),就是它 - 推荐设环境变量:
COMPOSER_PROCESS_TIMEOUT=1200(1200 秒 = 20 分钟),比--timeout=0更可靠,且全局生效 - Windows 用户用
set COMPOSER_PROCESS_TIMEOUT=1200(cmd)或$env:COMPOSER_PROCESS_TIMEOUT=1200(PowerShell) - 若仍失败,别急着再拉高:先确认是不是
git clone卡在 SSH 密钥、或 unzip 权限异常、或脚本里有交互式输入(加--no-interaction测试)
换了镜像还超时?检查缓存、配置优先级和 TLS 握手卡点
镜像不是设了就生效,且超时可能根本不是“慢”,而是卡在 TLS 握手或证书验证上:
- 清缓存:
composer clear-cache,旧缓存里的错误地址可能还在内存中 - 确认配置优先级:项目级
composer.json的repositories> 全局repo.packagist> 默认源;硬编码了已下线私有源会逐个重试超时 - 若
-vvv最后几行出现error:14090086而非cURL error 28,说明是 TLS 握手失败(比如企业中间人代理未导入根证书),此时调http.timeout无效,需配http.ssl.certificate_authority或关证书验证(不推荐) - 阿里云、腾讯云镜像已支持 HTTP/2 + 多路复用,实测下载速度提升 3~5 倍;但它们只加速
dist包,prefer-source或私有 Git 仓库仍直连,这点容易被忽略











