需启用php zip扩展:windows检查php.ini中extension=php_zip.dll并确认dll存在;linux/macos安装对应zip扩展包(如apt install php-zip);验证用php -m | grep zip,确保cli环境生效。

Composer 报错 “zip extension is missing” 怎么办
直接原因就是 PHP 没启用 zip 扩展,Composer 安装含 ZIP 包(如某些包的 dist 归档、git clone 回退 fallback)时会硬依赖它。不是警告,是致命错误,composer install 或 composer update 会直接中断。
确认 zip 扩展是否真的加载了
别只看 php.ini 里有没有 extension=zip,得验证运行时是否生效:
- 运行
php -m | grep zip—— 无输出即未加载 - 运行
php -i | grep "zip support"—— 返回zip support => enabled才算成功 - 注意:CLI 和 Web SAPI(如 Apache/Nginx 的 PHP)可能用不同
php.ini,composer走的是 CLI,所以必须检查php -i输出里的Loaded Configuration File路径
Windows 下启用 zip 扩展的常见陷阱
Win 环境最容易卡在这儿,尤其用 XAMPP、WAMP 或手动解压 PHP:
-
php.ini中取消注释的是extension=php_zip.dll(不是zip),且该 DLL 必须存在于ext/目录下 - PHP 8.0+ 默认不再带
php_zip.dll,需确认下载的 Windows 版本是 “Thread Safe” + “VCxx” 匹配你的 VS 运行库(比如 Apache 用 VC17,就得下 VC17 编译版 PHP) - 若用 WSL 或 Docker,别在 Windows 主机上改
php.ini,得进容器或子系统里操作
Linux/macOS 启用 zip 扩展的最小动作
多数现代发行版 PHP 包已预编译 zip 支持,但常被禁用或拆成单独包:
- Ubuntu/Debian:
sudo apt install php-zip,然后确保/etc/php/*/cli/conf.d/20-zip.ini存在且内容为extension=zip - CentOS/RHEL:
sudo yum install php-pecl-zip或dnf install php-zip - macOS + Homebrew:
brew install php@8.2(自动带 zip),若用原生 PHP 则需重装带 zip 支持:brew reinstall php@8.2 --with-zip(新版 Homebrew 已弃用--with-,推荐直接装完整版) - 重启 CLI 无需 reload 服务,但改完配置后务必运行
php -v看有无警告,再跑php -m确认
最常被忽略的一点:有些 CI 环境(如 GitHub Actions 的 ubuntu-latest)默认 PHP 不带 zip,必须显式安装 php-zip 包,否则 composer install 在 pipeline 里静默失败。










