“Unzip with unzip command failed”是Composer因系统缺少unzip命令而报错,需安装unzip/zip工具而非仅启用PHP zip扩展;常见于Alpine、Ubuntu Server、Docker及WSL等最小化环境。
“Unzip with unzip command failed” 是什么问题
这个报错不是 PHP 扩展没开,而是 Composer 在底层尝试调用系统
命令失败后,才退回到
类——但如果你连
命令都没有,又没启用
扩展,就会卡死或报错。常见于最小化安装的 Linux(如 Alpine、Ubuntu Server)、Docker 容器或 WSL 环境。
Linux 下必须装
和
命令
Composer 默认优先用系统
解压下载的包(更快、更稳),而不是纯 PHP 实现。所以光开 PHP 的
扩展还不够,命令行工具本身得存在。
Ubuntu/Debian:
CentOS/RHEL 8+:
Alpine(Docker):
验证是否装好:
或
,有输出才算成功
为什么只装
还不够
很多人以为装了
就万事大吉,但 Composer 的行为是:先找
命令 → 找不到才 fallback 到
→ 如果
也没加载,就直接报错。而有些基础镜像(比如官方
)连
都不预装,
却可能已内置——这时你
显示正常,但 Composer 仍报错,就是这个原因。
Composer 2.9.6
Composer 2.9.6 是 PHP 生态中高效、稳定的依赖管理工具。此版本在性能与兼容性上进一步优化,改进了依赖解析算法,提升大型项目中的安装与更新速度。它支持并行下载任务,显著减少等待时间,并增强了与私有仓库及镜像源的交互稳定性。同时修复了多项命令行交互与内存使用相关的缺陷,确保在复杂依赖关系下依然可靠运行。无论是新项目初始化还是现有系统维护,Composer 2.9.6 都能为开发者提供流畅、精准的依赖管理体验。
下载
只能验证类是否存在,不能代替
命令检查
Docker 构建时,
必须放在
之前,且不能被缓存跳过
WSL 用户如果用的是 Ubuntu minimal,
包默认不带
,必须手动补
如何确认是命令缺失而非扩展问题
别猜,用两条命令快速定位:
查命令:
—— 没输出?立刻装
查类:
—— 输出
?再看
对应的
是否启用了
两者都 OK,再运行
,看日志里 fallback 发生在第几步
最容易被忽略的是:CLI 和 Web 使用的
不同,但 Composer 只认 CLI 的;而
命令不存在,连 CLI 层都过不去——这时候修 php.ini 根本没用。
unzipZipArchiveunzipzipunzipzipunzipzipsudo apt update && sudo apt install -y unzip zipsudo dnf install -y unzip zipRUN apk add --no-cache unzip zipunzip -vwhich unzipphp-zipphp-zipunzipZipArchiveZipArchivephp:8.2-cliunzipphp-zipphp -m | grep zipphp -r "echo class_exists('ZipArchive') ? 'OK' : 'Missing';"unzipRUN apt install unzipRUN composer installphp-cliunzipwhich unzipunzipphp -r "echo class_exists('ZipArchive') ? 'OK' : 'Missing';"Missingphp --iniphp.iniextension=zip.socomposer install -vvvphp.iniunzip