Composer 报错“ZipArchive not found”是因 PHP 未启用 zip 扩展,导致无法解压下载的 ZIP 包;需检查 php.ini 中 extension=zip.so(Linux/macOS)或 extension=php_zip.dll(Windows)是否启用,并确认 CLI 版 PHP 配置路径及扩展 ABI 兼容性。

Composer 报错 “ZipArchive not found” 是什么问题
这表示 Composer 在执行 composer install 或 composer update 时,尝试解压 ZIP 包(比如从 packagist 下载的包),但 PHP 环境里根本没加载 ZipArchive 类。它不是 Composer 自身的 bug,而是 PHP 缺少对应扩展——zip 扩展未启用或未安装。
确认 PHP 是否已安装 zip 扩展
运行以下命令检查:
php -m | grep zip
如果没输出,说明扩展没启用;或者更彻底一点:
php -i | grep "zip support"
若显示 zip support => disabled 或直接找不到这一行,就确认没装或没启。
立即学习“PHP免费学习笔记(深入)”;
常见原因包括:
- PHP 编译时没加
--with-zip(Linux 源码编译场景) -
extension=zip.so(Linux/macOS)或extension=php_zip.dll(Windows)没写进php.ini - 用的是某些精简版 PHP(如某些 Docker 镜像、XAMPP 旧版本),默认不带 zip
不同环境下启用 zip 扩展的方法
先找到正在被 Composer 使用的 PHP 配置文件路径:
php --ini
然后根据系统操作:
-
Ubuntu/Debian:
sudo apt install php-zip,再确认/etc/php/*/cli/php.ini里没有注释掉extension=zip -
CentOS/RHEL:
sudo yum install php-pecl-zip(或dnf install php-pecl-zip),检查php.ini中是否含extension=zip -
macOS + Homebrew PHP:
brew install php@8.2-zip(版本号按需替换),扩展通常自动启用,但可查$(brew --prefix)/etc/php/*/php.ini -
Windows(XAMPP/WAMP):打开
php.ini,取消注释extension=php_zip.dll,确保该 DLL 文件存在于ext/目录下 -
Docker(官方 php:alpine):构建时加
RUN apk add --no-cache zlib-dev && docker-php-ext-install zip
改完记得重启 CLI 环境(不需要 Web 服务重启,因为 Composer 走的是 CLI SAPI)。
验证 ZipArchive 是否真正可用
别只信 php -m,要实测类能否实例化:
php -r "new ZipArchive(); echo \"OK\n\";"
如果报 Fatal error: Uncaught Error: Class 'ZipArchive' not found,说明仍失败。此时重点检查:
- 是否改错了
php.ini(CLI 和 FPM 的配置文件常不同,Composer 用的是 CLI 版) - 扩展名是否拼错(例如写成
zip.so但实际是zip.so.1,或 Windows 下漏了php_前缀) - PHP 版本和扩展 ABI 不匹配(比如用 PHP 8.3 加载了为 8.2 编译的
zip.so)
一个容易忽略的点:某些共享主机或云函数环境(如早期阿里云函数计算)根本不允许启用 zip 扩展,这时只能换用 git 协议拉取源码,或预打包依赖。











