直接调高http.timeout和换阿里云镜像源可解决90%超时问题,但卡在Resolving dependencies是DNS问题,需改DNS而非timeout;卡在Downloading才需调http.timeout;配置镜像源必须严格满足键名、type值、HTTPS末尾斜杠三项要求。

直接调高 http.timeout 和 process-timeout,同时换阿里云镜像源,90% 的超时问题当场消失。但必须分清卡在哪一步——卡在 Resolving dependencies 不是 timeout 能解决的,那是 DNS 问题。
卡在 Resolving dependencies 是 DNS,不是 timeout
这一步 Composer 还没发 HTTP 请求,只在查 mirrors.aliyun.com 或 packagist.org 的 IP 地址。改 http.timeout 完全无效,纯属白等。
- 现象包括:
Could not resolve host、unknown host、ping packagist.org失败 - 手动测 DNS:
dig mirrors.aliyun.com @8.8.8.8,看是否返回有效 IP - 临时换系统 DNS:Linux/macOS 改
/etc/resolv.conf加nameserver 8.8.8.8;Windows 在网络适配器里手动设 - 检查
/etc/hosts(或C:\Windows\System32\drivers\etc\hosts)是否误写了错误映射 - 用手机热点试一次——很多企业网会屏蔽
packagist.org和github.com
卡在 Downloading https:// 才该调 http.timeout
这是真正走 HTTP 的阶段,比如拉 packages.json、下载 ZIP 包。错误里常带 cURL error 28 或反复 retry 后失败。
-
http.timeout控制 DNS 解析 + TLS 握手 + 首字节等待 + 整个 body 传输,默认仅 300 秒,弱网下极易触发 - 全局设置(推荐):
composer config -g http.timeout 600 - 项目级更稳妥(CI 友好):在
composer.json的"config"段加"http.timeout": 600 - 临时调试优先用环境变量:
COMPOSER_HTTP_TIMEOUT=1200 composer install,避免污染配置 - 注意:
PHP CLI的default_socket_timeout若低于你设的值(查法:php -i | grep default_socket_timeout),会提前掐断连接——常见默认值是 60,务必同步调高
换阿里云镜像源必须写对命令,漏一个字符就静默失败
命令必须同时满足三项硬性要求,否则不报错、不提示、也不生效:
- 键名是
repo.packagist(注意是repo单数,不是repos) -
composer是type值,不能省略(写成composer config -g repo.packagist https://就 fallback 到官方源) - URL 必须是 HTTPS,且末尾带斜杠:
https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌ - 正确命令(可直接复制):
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 验证是否真正生效:
composer config -g repo.packagist应输出{"type": "composer", "url": "https://mirrors.aliyun.com/composer/"}。如果返回空、null或仍是"https://packagist.org",说明配置失败
重试前必须清理 vendor 和 lock,否则大概率重复失败
Composer 没有断点续传,中断后残留状态不可信。能否重试成功,取决于 vendor 和缓存里有没有损坏文件。
- 先跑
composer install --dry-run:如果大量显示Skipped,说明状态基本完整,可直接重试 - 如果输出以
Installing开头或直接报错(如Invalid argument supplied for foreach()),必须清理 - 执行
rm -rf vendor/ composer.lock(Linux/macOS)或rd /s /q vendor && del composer.lock(Windows) - 再加
--prefer-dist --no-scripts --no-plugins降低失败面 - CI 环境中务必挂载
$HOME/.composer/cache,否则每次都是裸奔重下
最常被忽略的一点:项目级 repositories 字段会完全屏蔽全局镜像配置,哪怕你 composer config -g repo.packagist 写得再对,只要 composer.json 里有 "repositories" 数组,它就优先读那个——检查用 composer config repositories,空才安全。











