解决Composer提示“The zip extension and unzip command are both missing”的错误

发布时间 - 2026-01-04 00:00:00    点击率:
Composer报该错误是因为PHP zip扩展未启用且系统unzip命令缺失;它优先用zip扩展解压,失败后回退到unzip命令,两者皆无则报错退出。

为什么 Composer 会报 “The zip extension and unzip command are both missing”

这个错误不是 Composer 自身出问题,而是它在安装包时发现两个关键解压能力都不可用:zip PHP 扩展未启用,且系统级 unzip 命令也找不到。Composer 默认优先用 PHP 的 zip 扩展解压 ZIP 包(比如从 packagist 下载的 .zip 归档), fallback 到系统 unzip 命令;两者全缺,就直接报错退出。

检查并启用 PHP 的 zip 扩展

多数 Linux/macOS 发行版的 PHP 默认不启用 zip 扩展,Windows 的 php.ini 里它常被注释掉。先确认是否加载:

php -m | grep zip

如果无输出,说明未启用。解决方式依环境而定:

  • Ubuntu/Debian:sudo apt install php-zip,然后重启 Web 服务或 CLI PHP(无需改 php.ini)
  • CentOS/RHEL:sudo yum install php-pecl-zipdnf install php-pecl-zip
  • macOS(Homebrew PHP):brew install php@8.2-zip(版本号按需替换),再检查 php --ini 找到配置目录,确认 extension=zip.so写入 php.ini
  • Windows:打开 php.ini,取消 ;extension=zip 前的分号,保存后重启 Apache/Nginx 或终端

验证系统是否有 unzip 命令并加入 PATH

即使启用了 PHP zip 扩展,某些包(尤其是含 symlink 或特殊权限的)仍依赖 unzip 命令。运行以下命令检查:

which unzip

若无输出,需安装:

  • Ubuntu/Debian:sudo apt install unzip
  • CentOS/RHEL:sudo yum install unzip
  • macOS:brew install unzip(或用 brew install p7zip 后软链,但推荐原生 unzip)
  • Windows:从 Info-ZIP 官网 下载 unzip.exe,放入 PATH 目录(如 C:\Windows),或把它的路径加进系统环境变量

注意:Windows 用户容易忽略 unzip.exe 必须叫 unzip(不能是 unzip64 或带版本号),且必须能被 cmd 或 PowerShell 直接调用(即 unzip -v 能返回版本信息)。

临时绕过 zip 依赖(仅调试用,不推荐长期)

如果实在无法装 zip 扩展或 unzip,可强制 Composer 改用 tar 格式下载(packagist 多数包同时提供 .tar.gz):

composer config -g github-oauth.github.com YOUR_TOKEN  # 可选,避免限流
composer config -g prefer-stable true
composer config -g use-include-path false
composer config -g archive-format tar

但这有局限:

  • 部分私有仓库或老旧包只提供 ZIP,archive-format tar 会直接失败
  • PHP phar 扩展必须启用(否则 tar 解压也会失败)
  • 性能略低,且非标准路径,后续升级可能意外触发 ZIP 回退

真正稳定的做法还是补上 zip 扩展和 unzip 命令——尤其在 CI/CD 环境中,漏掉任意一个都会导致构建中断,而且错误提示不指明具体缺哪个,容易反复试错。


# php  # linux  # centos  # git  # composer  # windows  # apache  # github  # nginx  # format  # macos  # ubuntu  # debian  # 报错  # 会报  # 重启  # 是因为  # 都不  # 也会  # 尤其是  # 找不到  # 可选  # 它在 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel怎么实现模型属性转换Casting_Laravel自动将JSON字段转为数组【技巧】  QQ浏览器网页版登录入口 个人中心在线进入  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  网站制作怎么样才能赚钱,用自己的电脑做服务器架设网站有什么利弊,能赚钱吗?  怎么用AI帮你设计一套个性化的手机App图标?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧  宙斯浏览器视频悬浮窗怎么开启 边看视频边操作其他应用教程  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  用yum安装MySQLdb模块的步骤方法  Laravel如何配置Horizon来管理队列?(安装和使用)  如何在HTML表单中获取用户输入并用JavaScript动态控制复利计算循环  无锡营销型网站制作公司,无锡网选车牌流程?  如何在IIS管理器中快速创建并配置网站?  EditPlus中的正则表达式 实战(1)  Laravel中间件如何使用_Laravel自定义中间件实现权限控制  uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址  使用豆包 AI 辅助进行简单网页 HTML 结构设计  如何在宝塔面板创建新站点?  大连 网站制作,大连天途有线官网?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】  bootstrap日历插件datetimepicker使用方法  简单实现Android文件上传  深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  音乐网站服务器如何优化API响应速度?  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  Laravel如何部署到服务器_线上部署Laravel项目的完整流程与步骤  中山网站推广排名,中山信息港登录入口?  Python面向对象测试方法_mock解析【教程】  Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门  北京企业网站设计制作公司,北京铁路集团官方网站?  什么是javascript作用域_全局和局部作用域有什么区别?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  Laravel怎么上传文件_Laravel图片上传及存储配置  如何用VPS主机快速搭建个人网站?  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  laravel怎么实现图片的压缩和裁剪_laravel图片压缩与裁剪方法  惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?  如何在IIS服务器上快速部署高效网站?  Android自定义listview布局实现上拉加载下拉刷新功能  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧  如何确认建站备案号应放置的具体位置?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  Laravel怎么连接多个数据库_Laravel多数据库连接配置  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  如何在新浪SAE免费搭建个人博客?  如何确保FTP站点访问权限与数据传输安全?