composer报错“zip extension is missing”是因为php cli环境未启用zip扩展;需先用php -m | grep zip验证缺失,再按php版本安装对应扩展包(如ubuntu下php8.1-zip),最后重启服务并确认php -r “new ziparchive();”不报错。

Composer报错“zip extension is missing”怎么快速确认
不是所有PHP安装都默认带zip扩展,尤其用包管理器(如apt、yum)装的PHP常会漏掉它。Composer在解压依赖包(比如vendor里的tar.gz或zip)时必须用到这个扩展,缺了就直接报错:zip extension is missing。
先验证是否真缺失:
- 运行
php -m | grep zip—— 无输出即未启用 - 运行
php -i | grep "zip support"—— 显示zip support => disabled或根本没这行,说明没装或没启 - 别只看
phpinfo()网页页,CLI和Web用的PHP配置可能不同,Composer走的是CLI环境
Ubuntu/debian下安装php-zip扩展的正确命令
不同PHP版本对应不同包名,硬写php-zip大概率失败。得按实际PHP主版本号来:
- PHP 8.1:装
php8.1-zip(不是php-zip) - PHP 8.2:装
php8.2-zip - PHP 7.4:装
php7.4-zip - 装完必须重启PHP服务:
sudo systemctl restart php8.1-fpm(FPM)或sudo systemctl restart apache2(Apache) - CLI模式不用重启,但得确认
php -v输出的版本和你装的包一致,否则可能装错版本
centos/RHEL/Rocky linux用dnf/yum安装zip扩展的要点
这些系统不叫php-zip,而叫php-pecl-zip,且依赖EPEL源:
立即学习“PHP免费学习笔记(深入)”;
- 先开EPEL:
sudo dnf install epel-release(RHEL 8+/Rocky 8+)或sudo yum install epel-release(旧版) - 再装扩展:
sudo dnf install php-pecl-zip(注意是pecl,不是zip) - 装完检查
/etc/php.d/zip.ini是否存在,内容应为extension=zip;若没有,手动创建该文件 - 重启Web服务:
sudo systemctl restart httpd或php-fpm - 有些镜像(如AlmaLinux最小安装)连
unzip命令都没装,composer install中途可能卡在“cannot unpack”,顺手补上:sudo dnf install unzip
自己编译PHP时忘了加–enable-zip怎么办
没法热加载,只能重编译。但不必全量重装,重点改两个地方:
- 进PHP源码目录,重新运行
./configure时加上--enable-zip(如果之前用了--with-libzip,确保系统已装libzip-devel) -
make && sudo make install后,php -m仍不显示zip?大概率是php.ini里没开——检查extension=zip.so是否被注释,路径是否对(extension_dir值要匹配) - 常见坑:
make install不会自动覆盖旧的php.ini,也不会自动加扩展行,得手动配 - 验证:跑
php -r "new ZipArchive(); echo 'ok';",不报错才算真正可用
最麻烦的其实是多PHP版本共存时搞混CLI和FPM的配置路径,或者docker里PHP镜像用的是alpine(得装php82-zip包,不是zip),这些地方一错,前面全白干。