解决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-zip或dnf 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站点访问权限与数据传输安全?


写入