composer卡在downloading且报curl error 28,主因是默认超时过短(300秒),应优先换国内镜像源;若仍超时,需区分http请求(可配http.timeout、http.connect_timeout)与git clone(由git自身超时控制)。

Composer install/update 一直卡在 downloading,提示 cURL error 28
这是典型的网络请求超时,Composer 默认的 cURL 超时时间太短,尤其在国内或走代理时很容易触发。curl_setopt 底层默认设了 timeout 和 connect_timeout,但 Composer 没暴露全部参数,得靠配置文件或环境变量干预。
- 错误现象常见为:
cURL error 28: Operation timed out after 300000 milliseconds with 0 bytes received(注意数字是毫秒) - 不是所有网络慢都该调大 timeout——先确认是不是源的问题:试试换国内镜像源,比调超时更治本
- Composer 2.2+ 开始支持
http.timeout配置项,但只影响 HTTP 请求,不控制 Git 克隆或 zip 下载 - 如果用的是
git@协议拉包,超时由 Git 自己控制,和 Composer 的 http 设置无关
怎么永久设置 Composer 的网络请求超时时间
通过全局 config 设置最稳妥,避免每次命令加参数。注意:这个设置只对 Composer 自己发起的 HTTP(S) 请求生效(比如访问 packagist.org 或镜像站 API),不改 Git 或 zip 解压行为。
- 运行:
composer config -g http.timeout 600(单位是秒,600 = 10 分钟) - 同时建议设连接超时:
composer config -g http.connect_timeout 30 - 配置写入
~/.composer/config.json,可手动检查是否生效 - 如果项目级覆盖,去掉
-g,在项目根目录下运行(会写进composer.json的config字段)
为什么换了镜像源还超时?可能卡在 git clone 阶段
Composer 安装时分两步:先查 metadata(走 HTTP),再下载代码(可能走 git clone、zip 或 hg)。镜像源只加速第一步;第二步如果包声明了 "source": {"type": "git", ...},Composer 就会直接 git clone,此时 timeout 由系统 Git 决定。
- 查当前包的获取方式:
composer show vendor/package --all | grep -A5 source - 强制让 Composer 用 zip 下载(跳过 git):
composer config -g github-protocols https(对 GitHub 有效) - 全局禁用 git:
composer config -g use-github-api false,但可能丢失私有 repo 支持 - Git 自身超时需单独设:
git config --global core.sshCommand "ssh -o ConnectTimeout=30"或改http.postBuffer等
临时提速比调 timeout 更有效:换源 + 关闭更新检查
很多“超时”本质是等 Packagist 主站响应,而不是真网络断了。关掉元数据刷新、切国内源,往往比硬扛 timeout 更快落地。
- 换阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 跳过平台检查(省去 PHP 扩展校验耗时):
composer install --no-scripts --no-plugins - 禁止自动更新 lock 文件:
composer install --no-update(确保已有composer.lock) - 如果只是部署,用
--prefer-dist(优先 zip)而非--prefer-source(默认可能走 git)
composer dump-autoload -o 替代重装,有时候比等超时结束更省事。










