“ZipArchive not found”表示PHP缺少zip扩展,Composer因无法调用ZipArchive类而报错;需确认当前CLI PHP版本、启用extension=zip(Windows用zip非php_zip.dll)、验证php -r "new ZipArchive();"是否成功。

Composer报错“ZipArchive not found”是什么意思
这不是 Composer 本身的问题,而是 PHP 运行时缺少 zip 扩展——Composer 在下载并解压包(比如 vendor/ 里的依赖)时,必须调用 PHP 的 ZipArchive 类。如果这个类不存在,就会直接报错退出,常见错误信息是:Class 'ZipArchive' not found 或 zip extension is required。
Linux/macOS 下确认并启用 zip 扩展
先确认当前 PHP 是否已编译或安装了 zip 支持:
- 运行
php -m | grep zip,没输出说明未启用 - 运行
php -i | grep "zip support",返回zip support => enabled才算生效 - 如果没启用,多数情况是扩展文件存在但没在
php.ini中加载:检查extension=zip.so是否被注释,路径是否正确(可用php --ini查配置文件位置) - Debian/Ubuntu 用户常用
sudo apt install php-zip;CentOS/RHEL 用sudo yum install php-pecl-zip或dnf install php-zip;macOS 用brew install php@8.2(版本需匹配)后通常自动带 zip
Windows 下 PHP zip 扩展启用失败的典型原因
Windows 用户最容易卡在这里,不是没装,而是「装了但没连上」:
-
php.ini中写的是extension=php_zip.dll,但 PHP 8.0+ 已改用extension=zip(不带.dll后缀),旧写法会静默失败 -
php_zip.dll文件实际不在ext/目录下,或者权限被杀毒软件拦截导致无法加载 - 用了 XAMPP/MAMP/WAMP 等集成环境,它们自带的 PHP 和命令行 PHP 很可能不是同一个——
php -v显示的版本和phpinfo()页面显示的可能不同,务必用where php(Windows)或which php(macOS/Linux)确认 CLI 使用的是哪个 PHP - 重启 Web 服务(如 Apache)不等于重启 CLI 环境,修改
php.ini后,必须重新打开终端再试php -m
验证是否真正解决,别被假成功骗了
光看 php -m | grep zip 有输出还不够,因为有些系统会把扩展编译进 PHP 内核(zip support => enabled (bundled)),但实际类仍不可用。最稳妥的验证方式是:
立即学习“PHP免费学习笔记(深入)”;
- 运行
php -r "new ZipArchive(); echo 'OK';"—— 没报错才真行 - 再跑一次
composer install或composer create-project,观察是否跳过 zip 报错,开始正常下载解压 - 如果仍失败,注意 Composer 是否用了自定义 PHP 路径(比如通过
COMPOSER_BINARY或php -d覆盖),此时要检查那个特定 PHP 实例的扩展状态
真正麻烦的永远不是“怎么开 zip”,而是“哪个 PHP 在跑、它读的是哪份 php.ini、扩展到底加载到谁头上”。多查一层 php --ini 和 php -r "print_r(get_loaded_extensions());",比重装十遍还管用。










