缺 ext-zip 是 php 环境问题而非 composer 故障,需通过 php -r "echo class_exists('ziparchive') ? 'ok' : 'missing';" 确认类是否存在,并检查 php.ini 配置、扩展路径及 libzip 版本。

缺 ext-zip 不是 Composer 坏了,是 PHP 环境没准备好——ZipArchive 类根本不存在,Composer 在安装前就直接拦停,不给你机会往下走。
怎么确认 zip 扩展真没加载(别猜)
运行这行命令才是有效验证:
php -r "echo class_exists('ZipArchive') ? 'OK' : 'Missing';"
比 php -m | grep zip 更可靠,因为有些系统装了模块但没启用,或者 extension=zip 被注释了、路径写错了、so 文件压根不在 extension_dir 里。
-
php --ini查 CLI 模式用的 php.ini 路径(重点看 “Loaded Configuration File”) - 打开那个文件,确认有且只有一行未注释的
extension=zip(PHP 8+ 可省略.so后缀) - 如果报错还带
libzip version too old,说明底层库太旧,得升级libzip-dev再重装扩展
不同系统装 zip 扩展的实操要点
装错包名或漏重启,等于白干。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- Ubuntu/Debian:
sudo apt install php-zip(自动启用,不用改 php.ini),但必须sudo systemctl restart php*-fpm或新开终端 - CentOS/RHEL 8+:
sudo dnf install php-zip;7系用sudo yum install php-pecl-zip,装完检查/etc/php.d/zip.ini是否存在且内容为extension=zip - macOS + Homebrew:
brew install php@8.2-zip(版本号按php -v对齐),然后确认php.ini里有extension="zip.so",路径可用brew --prefix php@8.2查 - Alpine(Docker 常见):
apk add php8-zip(注意版本号匹配),再加docker-php-ext-enable zip(仅当镜像没自动启用时)
Windows 下最容易踩的三个坑
不是取消分号就完事。
-
php_zip.dll必须真实存在于ext/目录下;若不存在,说明你装的是精简版 PHP,得换完整包或手动复制 - XAMPP/WAMP 有两个
php.ini:CLI 用命令行查到的那个,Apache 用phpinfo()页面显示的路径,两个都得改 -
extension_dir要写对,比如extension_dir = "C:\xampp\php\ext",相对路径容易失效
临时绕过 zip 扩展(仅限 CI 或调试)
不能长期依赖,但能帮你先跑通流程。
-
composer install --prefer-source:跳过 zip 解压,改走 git clone,适合私有包或网络受限环境 -
COMPOSER_DISABLE_EXTENSIONS=1 composer install:强制跳过所有扩展检查(包括ext-zip),但后续运行时仍会因ZipArchive不存在而 fatal error - 别用
sudo composer install:root 用户的 PHP 配置和当前用户不同,改了普通用户的 php.ini 没用
最常被忽略的一点:即使 php -m 显示 zip,也得 php -r "new ZipArchive();" 实际实例化一次——有些扩展加载了但初始化失败,类存在却不可用。










