Composer 报错“unzip 未找到”是因为其依赖系统级 unzip 命令解压 ZIP 包,而最小化 Linux 系统、Alpine Docker 镜像等常未预装;需按系统执行对应安装命令(如 apt install unzip 或 apk add unzip),并验证 unzip -v 输出版本信息。

为什么 Composer 报错 unzip 未找到
Composer 在安装某些包(尤其是含 ZIP 发布资产的包,如 Laravel 的 laravel/installer 或部分私有仓库包)时,会调用系统命令 unzip 解压 ZIP 文件。如果系统没装这个命令,就会报类似这样的错误:
Failed to download vendor/package: The zip extension and unzip command are both missing.
注意:这里不是 PHP 的 zip 扩展没启用(那是另一回事),而是系统级的 unzip 命令不可用——常见于最小化安装的 Linux 发行版(如 Alpine、CentOS Stream、Ubuntu Server minimal)或某些 Docker 基础镜像。
不同系统安装 unzip 的命令
确认是否已安装可执行:which unzip 或 unzip -v;没输出就说明缺失。按环境直接运行对应命令:
- Ubuntu / Debian:
sudo apt update && sudo apt install -y unzip - CentOS / RHEL / AlmaLinux:
sudo yum install -y unzip(旧版)或sudo dnf install -y unzip(新版) - Alpine Linux(常用于 Docker):
apk add --no-cache unzip - macOS(Homebrew):
brew install unzip(通常已自带,但 M1/M2 某些精简环境可能缺失)
装完后建议验证:unzip -v 应输出版本信息,且 Composer 再次运行 composer install 不再卡在解压环节。
不装 unzip 的临时替代方案(不推荐长期用)
如果你无法安装系统工具(比如受限容器、CI 环境权限不足),可让 Composer 回退到纯 PHP 解压逻辑(需 PHP 启用 zip 扩展):
95Shop可以免费下载使用,是一款仿醉品商城网店系统,内置SEO优化,具有模块丰富、管理简洁直观,操作易用等特点,系统功能完整,运行速度较快,采用ASP.NET(C#)技术开发,配合SQL Serve2000数据库存储数据,运行环境为微软ASP.NET 2.0。95Shop官方网站定期开发新功能和维护升级。可以放心使用! 安装运行方法 1、下载软件压缩包; 2、将下载的软件压缩包解压缩,得到we
- 确保 PHP
zip扩展已加载:php -m | grep zip,若无输出则需启用(如sudo phpenmod zip或修改php.ini) - 强制 Composer 使用 PHP 解压:
composer config -g archive-format zip(其实默认就是 zip,关键在禁用系统命令) - 更直接的方式是设置环境变量:
export COMPOSER_NO_INTERACTION=1 && export COMPOSER_DISABLE_TTY=1,并确认没有显式配置"use-zip": false在composer.json的config下
但要注意:PHP zip 扩展解压大文件较慢,且某些带特殊路径或符号链接的 ZIP 包可能行为不一致——unzip 命令仍是首选。
Docker 中容易忽略的点
很多自定义 PHP 镜像(尤其基于 php:alpine 或 php:slim)默认不含 unzip,只靠 zip 扩展不够。即使你 RUN 了 pecl install zip,仍要额外装系统 unzip:
- Alpine 镜像中漏掉
apk add unzip是高频翻车点 - 多阶段构建时,
unzip必须出现在最终运行 Composer 的那一层,不能只在 builder 阶段装 - 某些 CI 平台(如 GitLab Runner 的 docker executor)使用缓存镜像,需确认基础镜像是否已预装
unzip,否则每次都要重装
最稳妥的做法是在 Dockerfile 开头就加上对应安装指令,别依赖“应该有了”这种假设。









