PHP 缺少 zip 扩展导致 Composer 报错,需确认 CLI 模式 PHP 版本及配置文件路径,根据系统类型安装对应 zip 扩展(如 Ubuntu 用 sudo apt install php-zip),装后重启终端并验证 php -m | grep zip,最后运行 composer diagnose 确认可用。

Linux 下运行 composer 提示 The zip extension is missing,说明 PHP 缺少 zip 扩展模块 —— 这不是 Composer 本身的问题,而是 PHP 运行环境缺失必要扩展,必须补上才能正常解压包。
确认当前 PHP 版本和扩展路径
Composer 依赖的是 CLI 模式下的 PHP(不是 Apache/Nginx 用的那个),所以得先查清楚你实际在终端里跑的是哪个 PHP:
php -v php -i | grep "Loaded Configuration File" php -m | grep zip
如果最后一行没输出,就证实 zip 确实没启用。注意:php -m 显示的是已加载的扩展,而 extension=zip.so 可能被注释了,也可能根本没安装这个 so 文件。
根据发行版安装 zip 扩展
不同包管理器安装方式不同,别直接抄命令,先看清楚自己系统类型:
- Ubuntu/Debian:
sudo apt install php-zip(会自动启用,无需手动改php.ini) - CentOS/RHEL 8+:
sudo dnf install php-zip - CentOS/RHEL 7:
sudo yum install php-pecl-zip(注意是pecl-zip,不是php-zip) - Alpine(Docker 常见):
apk add php7-zip或apk add php8-zip,取决于 PHP 版本
装完务必重启 CLI 环境(关掉再开个新终端),然后再次运行 php -m | grep zip 验证。
手动启用 zip 扩展(仅当自动启用失败时)
某些编译安装的 PHP 或自定义配置下,即使 zip.so 已存在,也需手动开启:
- 找到 CLI 模式的
php.ini(用php --ini查) - 编辑该文件,取消注释或添加:
extension=zip(PHP 8+ 可省略.so后缀) - 如果提示找不到
zip.so,运行find /usr -name "zip.so" 2>/dev/null定位,再在php.ini中写绝对路径,例如:extension=/usr/lib/php/20220829/zip.so
改完不用重启服务,但要确保没其他 php.ini 覆盖(比如 /etc/php/*/cli/conf.d/ 下有独立配置)。
验证 Composer 是否真正可用
别只测 php -m,要实打实跑一次 Composer 命令:
composer diagnose
如果还报错,重点看两件事:
- 是否用了
sudo composer?sudo 会切换到 root 用户环境,PHP 配置可能完全不同 —— 改用普通用户执行 - 是否通过
curl -sS https://getcomposer.org/installer | php手动安装过 Composer?这种安装方式不依赖系统 PHP 扩展,但后续调用仍走系统 PHP,所以扩展缺失照样报错 - Docker 环境中,
php:cli镜像默认不含zip,必须在Dockerfile中显式安装
最常被忽略的一点:CLI 和 Web 用的不是同一份 php.ini,哪怕网页能跑 Laravel,终端里 composer install 依然会跪 —— 动手前一定先 php -i | grep "Loaded Configuration File" 确认路径。










