校验失败(如“corrupted zip file”或“sha256 checksum mismatch”)须同步清理损坏zip、composer.lock和vendor/,再执行composer install --no-cache --force-checksums重装。

校验失败(如 “Corrupted zip file” 或 “sha256 checksum mismatch”)不是网络问题,而是本地缓存 ZIP 文件损坏或 composer.lock 中记录的哈希值与当前缓存不匹配——必须同步清理损坏包 + composer.lock + vendor/,再强制重装。
定位哪个 ZIP 文件损坏
Composer 不会告诉你具体哪个文件坏,但错误信息末尾通常暴露线索:
- 报错含
Failed to extract vendor/symfony/console→ 搜索symfony/console相关 ZIP - 报错含
Corrupted zip file: monolog/monolog→ 直接查monolog/monolog - 运行
composer install -v,盯住最后几行:找Extracting或Downloading后紧跟着的包名和版本号
然后进缓存目录查对应 ZIP:
- Linux/macOS:
ls -l ~/.composer/cache/files/*monolog*monolog*.zip - Windows(PowerShell):
Get-ChildItem "$env:APPDATA\Composer\Cache\Files" -Recurse -Filter "*monolog*monolog*.zip"
只删这一条 ZIP,别碰 repo/ 和 vcs/ ——它们不参与解压流程。
为什么只清缓存或只删 vendor 无效
composer clear-cache 会删掉所有 ZIP,但 Composer 默认仍可能复用已损坏的缓存副本——它不重新下载,只校验旧哈希;而只删 vendor/ 不动 composer.lock,则校验失败根源仍在:composer.lock 里硬编码了旧的 dist.sha256 值,和当前缓存 ZIP 不匹配,Composer 就拒绝安装。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 必须三者同步操作:删损坏 ZIP + 删
composer.lock+ 删vendor/ - 删
composer.lock前建议先备份:cp composer.lock composer.lock.bak - Linux/macOS 执行:
rm -rf vendor composer.lock;Windows 执行:rmdir /s /q vendor & del composer.lock
重装时必须加 --no-cache --force-checksums
普通 composer install 仍可能从缓存读取旧 ZIP 并跳过校验,导致失败复现。关键参数作用如下:
-
--no-cache:本次完全跳过本地 ZIP 查找,强制重新下载每个包 -
--force-checksums:校验失败立刻退出,不写入vendor/,避免污染 - 完整命令:
composer install --no-cache --force-checksums
漏掉任一参数,都可能让校验失败静默跳过、或继续用坏包覆盖 vendor/。
CI 环境中特别容易踩的坑
CI 流水线里常因权限、用户切换或缓存挂载点错位,导致清理失效:
- 用
composer clear-cache --no-interaction,否则默认交互模式会卡住 - 确认
composer config --global cache-dir输出路径是否指向预期位置(比如 NFS 挂载点而非本地磁盘) - 若仍卡住,检查是否有后台进程锁着缓存目录:
lsof +D $(composer config --global cache-dir)(Linux/macOS) - 镜像配置必须生效:键名是
repo.packagist(不是repos.packagist),type必须显式为composer,URL 结尾不能多斜杠
最隐蔽的问题是 composer.lock 里还存着旧源地址(比如私有仓库 URL 已变更),重装永远走错路——这种情况下,光清缓存毫无意义。










