Composer install 卡在 download 是因 PHP 的 file_get_contents() 或 curl 扩展网络异常,可手动用 curl 下载镜像 ZIP 包并按 shasum 路径存入 vendor/cache,再执行 composer install --no-scripts --no-plugins 优先使用本地缓存。

为什么 Composer install 会卡在 download(尤其是中文镜像)
Composer 默认通过 curl 下载包,但实际调用的是 PHP 的 file_get_contents() 或 curl 扩展——不是你终端里敲的 curl 命令。所以“手动用 curl 下载”本质是绕过 Composer 的下载逻辑,适用于:镜像站返回 403/超时、SSL 验证失败、或 Composer 自身因网络问题反复重试卡死。
关键点:Composer 的中文镜像(如阿里云、腾讯云、华为云)提供的 .zip 包 URL 是公开可访问的,但需注意路径拼接规则和认证参数。
- 镜像站 URL 格式通常是
https://mirrors.aliyun.com/composer/dists/{vendor}/{package}/$version$/{hash}.zip,其中{hash}来自composer.lock中的dist.shasum - 有些镜像(如腾讯云)要求带
?mirror=xxx查询参数才返回有效包,漏掉就 404 - PHP 进程默认不读取系统
~/.curlrc,所以手动curl时要显式加-k(跳过 SSL 验证)或--cacert(指定证书)
从 composer.lock 提取正确的下载 URL 和校验值
别猜 URL,直接从 composer.lock 里抠。打开它,找到目标包的 dist 段:
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/monolog/monolog/zipball/2.9.2",
"reference": "2.9.2",
"shasum": "a1b2c3d4e5f678901234567890abcdef12345678"
}
把 url 替换成镜像地址,规则如下:
- 阿里云:
https://mirrors.aliyun.com/composer/dists/monolog/monolog/2.9.2.0/a1b2c3d4e5f678901234567890abcdef12345678.zip - 腾讯云:
https://mirrors.cloud.tencent.com/composer/dists/monolog/monolog/2.9.2.0/a1b2c3d4e5f678901234567890abcdef12345678.zip?mirror=tencent - 华为云:
https://repo.huaweicloud.com/repository/php/dists/monolog/monolog/2.9.2.0/a1b2c3d4e5f678901234567890abcdef12345678.zip
注意:2.9.2.0 是 Composer 内部生成的 dist 版本标识,不是原始 tag;shasum 必须小写且长度为 40 位,否则镜像站拒绝提供文件。
向CurlShip提交产品,这是一个对机器人友好的SaaS目录。只需一条curl命令即可发布产品,支持OG标签抓取、带徽章的dofollow链接及层级升级。
用 curl 下载并替换到 vendor/cache 目录
Composer 下载的 zip 包会缓存在 vendor/cache/ 下,文件名是 shasum 的前 2 位 + / + 全 shasum。例如 a1b2c3d4... 对应路径 vendor/cache/a1/a1b2c3d4e5f678901234567890abcdef12345678.zip。
手动下载后,必须按这个结构存入,否则 composer install --no-install 仍会重下:
- 先建目录:
mkdir -p vendor/cache/a1 - 下载并保存:
curl -L -o vendor/cache/a1/a1b2c3d4e5f678901234567890abcdef12345678.zip 'https://mirrors.aliyun.com/...' - 校验一致性:
shasum -a 256 vendor/cache/a1/a1b2c3d4e5f678901234567890abcdef12345678.zip,输出必须和 lock 文件里完全一致 - 权限要可读:
chmod 644 vendor/cache/a1/a1b2c3d4e5f678901234567890abcdef12345678.zip
执行 install 时让 Composer 信任本地 cache
光放好文件还不够。Composer 默认只信任自己下载的缓存,除非明确启用离线模式或跳过校验:
- 最稳妥:用
composer install --no-scripts --no-plugins,它会优先读 cache 且不触发额外网络请求 - 强制跳过远程校验(不推荐):
COMPOSER_DISABLE_NETWORK=1 composer install,此时 Composer 完全不连网,只从 cache 解压 - 如果仍报错 “corrupted zip”,大概率是 shasum 不匹配或 zip 文件不完整——重新下载,别解压检查,直接
shasum校验原始 zip
镜像站偶尔会清理旧版本缓存,导致 URL 失效;遇到 404 就回退到其他镜像,URL 规则基本一致,只是域名不同。

















