“Failed to extract vendor/package”表示ZIP包本身损坏,需先执行composer clear-cache清缓存、再删vendor、加--no-cache重装,并验证镜像配置是否生效。

Failed to extract vendor/package 是 ZIP 本身坏了
这不是网络中断或权限问题,而是 ~/.composer/cache/files/ 里那个 ZIP 文件校验失败了——Composer 下载后会用 SHA256 校验,不匹配就拒绝解压,且不会自动重试。典型错误如:Failed to extract vendor/symfony/console: unable to open archive 或 Content-Length mismatch。
- 别只删
vendor/:缓存里的坏 ZIP 还在,重装时照样被读取 - 先运行
composer clear-cache,再确认缓存目录是否真清空:ls -la $(composer config --global cache-dir)/files/ - 若只某个包反复出错(比如
monolog/monolog),可精准清理:rm -rf $(composer config --global cache-dir)/files/monolog/monolog - Windows 用户注意缓存路径是
%APPDATA%\Composer\Cache,不是~/.composer/cache
必须加 --no-cache 才算真正重拉
composer install 默认优先走本地缓存,即使你刚清过 cache,也可能因残留元数据或并发写入导致跳过下载。必须显式禁用缓存逻辑。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
-
composer install --no-cache是关键:它绕过所有缓存查找,强制从镜像源重新拉 ZIP 并校验 - CI/CD 中光靠
--no-cache不保险——流水线常挂载持久化缓存目录,得配合环境变量:COMPOSER_CACHE_DIR=/dev/null composer install --no-cache - 如果仍卡在同一个包,说明镜像源该版本 ZIP 确实损坏或已下线,运行
composer show vendor/package查当前可用版本,必要时手动调整composer.lock中的version字段
镜像配置失效会让损坏更难排查
你以为在走国内镜像,实际请求发到了 packagist.org,结果下载慢、中断、校验失败——而错误日志里根本不会提示“正在从 packagist.org 拉取”。
-
repo.packagist必须用repositories.packagist.org.type和repositories.packagist.org.url两行设置 - 项目级
"repositories"字段会完全屏蔽全局镜像配置,检查命令:grep -A 5 '"repositories"' ./composer.json - 验证真实请求地址:Linux/macOS 可用
strace -etrace=network composer install 2>&1 | grep 'connect',看连接 IP 是否指向镜像服务器 - 镜像服务异常(如返回 HTML 页面或卡住)比 ZIP 损坏更隐蔽,先
curl -I https://mirrors.aliyun.com/composer/packages.json确认 HTTP/2 200
zlib_decode(): data error 不是 ZIP 坏了,是 PHP 解压器不行
这个错误出现在下载完成后解压阶段,典型现象是卡在 Downloading 后立即崩,堆栈里带 zlib_decode()。它不是 ZIP 文件损坏,而是 PHP 的 zlib 扩展对某些 ZIP 流(比如含数据描述符、ZIP64)解析不稳定,尤其在 PHP 8.2+、WSL 或 Windows 下高频发生。
- 先清对应包缓存:
rm -rf ~/.composer/cache/files/laravel/framework/(替换为报错包名) - 关掉干扰项:
zlib.output_compression = Off(不是0或空字符串),zlib.encode = ""(PHP 8.0+),改完后重启 CLI PHP - 最稳方案:换 7-Zip 解压。Windows/WSL 下装好
7z.exe并加入 PATH,然后运行:COMPOSER_UNZIP=7zip composer install - 临时应急(不推荐):
COMPOSER_DISABLE_ZLIB=1 composer install,但速度极慢且不解决根本问题
composer.lock 里存着旧镜像生成的哈希值,换镜像后不删它,校验必然失败;还有就是 zlib.output_compression = Off 这种配置项,看着不起眼,却能让 zlib_decode() 直接崩溃。

















