Composer解压ZIP报zlib_decode()错误主因是PHP zlib扩展与ZIP格式兼容性问题,非网络或权限故障;应优先清缓存+–no-cache重试,检查zlib.output_compression关闭、zlib.encode置空,或设COMPOSER_UNZIP=7zip绕过zlib。
Composer install/update 报 zlib_decode(): data error
这是 Composer 在解压 ZIP 包时 zlib 扩展解析失败的典型错误,不是网络问题、权限问题或磁盘满,而是压缩流本身被截断或损坏——但更大概率是 PHP 的 zlib 扩展与 Composer 下载的 ZIP 数据不兼容(尤其在 Windows + WSL 或某些 PHP 8.2+ 环境下)。
常见触发场景:composer install 卡在 “Downloading …” 后报错;composer update 某个包下载完成后解压失败;使用国内镜像(如阿里云、腾讯云)时更频繁。
- 不要盲目重试或清空
~/.composer/cache—— 缓存里的损坏 ZIP 文件会反复复用 - 别急着换 PHP 版本 —— 多数情况是 zlib 解压逻辑对部分 ZIP 格式(如 ZIP64、含数据描述符的流式 ZIP)处理不稳
- 临时禁用压缩(非推荐):
COMPOSER_DISABLE_ZLIB=1 composer install,但会显著拖慢速度且不解决根本问题
强制跳过缓存并重新下载 ZIP 包
Composer 默认会复用 ~/.composer/cache/files/ 下已下载的 ZIP,哪怕它已损坏。绕过缓存是最直接有效的验证和修复方式。
- 运行前先删掉对应包的缓存目录(路径形如
~/.composer/cache/files/vender/package-name/xxx.zip),或干脆清空整个 files 缓存:composer clear-cache - 加上
--no-cache参数强制走网络下载:composer install --no-cache - 如果仍失败,加
-v查看具体哪个包出问题,再针对性删其缓存后重试
检查并切换 PHP 的 zlib 配置(关键)
PHP 的 zlib 扩展在不同版本中对 ZIP 流的兼容性有差异。重点检查两个配置项: