Composer提示zip扩展缺失_Linux安装PHP zip扩展方法【修复】

1次阅读

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

Composer提示zip扩展缺失_Linux安装PHP zip扩展方法【修复】

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 httpdphp-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),这些地方一错,前面全白干。

text=ZqhQzanResources