直接换镜像源、清缓存、验证请求路径三步到位;卡在Downloading https://packagist.org/packages.json是因DNS/TLS/防火墙导致元数据拉取失败,非Composer本身问题,调超时参数无效。

直接换镜像源 + 清缓存 + 验证请求路径,三步到位。别调超时参数——如果连 packages.json 都拉不下来,加时间只会让失败更慢。
为什么 composer require 会卡在 Downloading https://packagist.org/...
这不是 Composer 本身的问题,而是它默认直连境外 packagist.org,在国内多数网络环境下 DNS 解析慢、TLS 握手被干扰、或防火墙拦截 SNI 扩展,导致首字节都收不到。错误里带 cURL error 28 或反复 retry 后失败,基本可锁定是 HTTP 层卡住。
- 停在
Resolving dependencies:大概率是 DNS 问题,不是超时,换8.8.8.8或223.5.5.5测试 - 停在
Downloading https://packagist.org/packages.json:HTTP 请求没发出去或没响应,镜像没生效或被本地缓存绕过 - 停在
Downloading https://api.github.com/...:你 require 的包是 VCS 类型(如git@或 GitHub URL),镜像不代理,得单独处理
怎么确认镜像真的在用,而不是“配了等于没配”
composer config -g repo.packagist 只显示你写了什么,不反映实际行为。真正生效必须满足三个硬条件,缺一即静默回退官方源:
- 键名必须是单数
repo.packagist(不是repositories.packagist.org,也不是repos.packagist) - 第二个参数必须显式写
composer(这是type值,漏掉就无效) - URL 必须 HTTPS 且末尾带
/:https://mirrors.aliyun.com/composer/✅,https://mirrors.aliyun.com/composer❌
验证是否真生效:
composer clear-cache composer require monolog/monolog -vvv 2>&1 | grep "Downloading\|packages.json"
看到 Downloading https://mirrors.aliyun.com/composer/packages.json 才算成功;若仍是 packagist.org,说明配置没起作用。
http.timeout 和 process-timeout 到底该调哪个
卡在 Downloading 阶段,只和 http.timeout 有关——它控制 DNS + TLS + 首字节 + 整个 body 传输的总时间,默认仅 300 秒,弱网下极易触发。而 process-timeout 是给 git clone、unzip、post-install-cmd 这类子进程用的,和下载无关。
- 项目级最稳:
composer config http.timeout 600(写入当前composer.json的config段) - 全局生效:
composer config -g http.timeout 600 - 临时覆盖:
COMPOSER_HTTP_TIMEOUT=1200 composer require monolog/monolog - 注意:
php -i | grep default_socket_timeout查出的值若低于你设的http.timeout,PHP 会提前掐断连接,务必同步调高
换源后仍超时?先排除这四个隐藏坑
华为云、腾讯云、中科大等镜像本身稳定,换完还超时,八成是本地环节被卡住:
-
composer clear-cache必做——旧缓存里存着packagist.org的元数据签名,不清理,Composer 根本不会发新请求 - 检查代理干扰:
composer config -g http.proxy若有输出,且你没在用代理,赶紧composer config -g --unset http.proxy - Windows 用户改完配置要重启终端;Linux/macOS 用
sudo composer config -g会写进/root/.composer,普通用户读不到 - PHP 的
curl.cainfo必须指向真实有效的 CA 证书路径,否则 HTTPS 镜像握手失败,表现就是 Connection refused 或 SSL certificate problem
最常被忽略的是缓存和 CA 证书——这两项不处理,换十个镜像都没用。











