协议包下载失败主因是composer.lock中硬编码的旧dist URL未刷新,需删vendor和composer.lock、清缓存、执行composer update --lock重写URL并验证日志域名。

协议包下载失败,90%不是镜像问题,而是 Composer 仍用 composer.lock 里硬编码的旧 dist URL(如 https://packagist.org/downloads/...)发起请求,镜像根本没参与。
为什么 composer install 还在连 packagist.org 的 dist 地址?
Composer 2.2+ 之后,composer.lock 文件会固化每个包的 dist.url 字段。哪怕你已配好阿里云镜像,它仍优先尝试这个地址;失败后才 fallback——而新版 fallback 逻辑已被移除。
- 执行
composer show vendor/package -vvv,看日志里Downloading行的真实域名,不是mirrors.aliyun.com就说明锁文件没刷新 -
composer.lock中的"dist": {"url": "https://packagist.org/..."}是静态快照,换源后不会自动更新 - 手动改
composer.lock不安全:哈希校验失败、CI 拒绝提交、下次update被覆盖
必须三步清旧、刷新、验证
只改配置不清理锁文件和缓存,等于没换源。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 删掉
vendor/和composer.lock(别只删vendor) - 运行
composer clear-cache—— 否则本地元数据缓存仍指向旧源 - 重新生成锁文件:
composer install --no-plugins或composer update --lock,确保新dist.url写入composer.lock
某些包就是不走镜像?检查是否用了 --prefer-source
镜像只代理 dist(ZIP/TAR 包),不代理 source(Git clone)。如果包被强制设为 source 模式,Composer 会绕过镜像直连 GitHub/GitLab。
- 查包是否被显式指定:
"monolog/monolog": {"version": "dev-main", "source": true}在composer.json或composer.lock中 - 运行
composer config --list | grep prefer,确认没全局启用prefer-source - 临时强制走 dist:
composer install --prefer-dist,看是否恢复加速
HTTPS 协议层失败:不是镜像挂了,是 PHP 缺扩展或证书链异常
日志里出现 cURL error 60、SSL certificate problem 或超时,大概率不是镜像地址问题。
- 检查 PHP 是否启用
openssl和curl扩展:php -m | grep -E '^(openssl|curl)$' - 企业内网常见:中间设备拦截 HTTPS 流量,导致证书链不信任;可临时加
-d openssl.cafile=/path/to/cacert.pem指定可信根证书 - 别信
curl https://mirrors.aliyun.com/composer/packages.json成功就代表 OK——Composer 用的是自己的 HTTP client,不复用系统 curl 配置
真正卡住的地方,往往不在配置命令写对没写对,而在 composer.lock 里那几行硬编码的 URL 和 PHP 运行时环境的协议栈支持能力。改完配置后不删锁文件、不清缓存、不验证真实请求域名,就等于没动过。

















