报错中 ext-xxx 的 xxx 是关键,需按系统准确安装对应扩展包并验证 CLI 环境是否真正加载;常见缺失扩展包括 zip、json、curl、fileinfo、gd、mbstring、openssl、pdo。

看清楚报错里到底缺哪个 ext-
Composer 报错信息里那句 The requested PHP extension ext-xxx is missing 中的 xxx 就是关键。别跳过它去瞎装——ext-zip 和 ext-dom 是两个东西,装错包名或扩展名毫无作用。常见被卡住的有:ext-zip、ext-json、ext-curl、ext-fileinfo、ext-gd、ext-mbstring、ext-openssl、ext-pdo。先复制报错里的完整扩展名,后面所有操作都围绕它展开。
验证 CLI 环境是否真加载了该扩展
别信感觉,直接查终端里跑的 PHP 实际状态:
- 运行
php -v确认当前 CLI 用的是哪个 PHP 版本(比如PHP 8.2.12) - 运行
php --ini查 CLI 模式实际加载的php.ini路径(注意:不是 Apache 或 Nginx 用的那个) - 运行
php -m | grep xxx(把xxx替成你看到的扩展名,如zip)——没输出就代表没加载 - 更彻底一点:运行
php -r "var_dump(extension_loaded('xxx'));",返回bool(false)就坐实缺失
很多问题出在你以为改了 php.ini,其实改的是 Web 服务用的配置,CLI 根本没读它。
按系统类型装对包名,不是所有都叫 php-xxx
包管理器对扩展的命名规则差异很大,抄错一个字母就白忙:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Ubuntu/Debian:
sudo apt install php-zip(通用)或sudo apt install php8.2-zip(版本锁定) - CentOS/RHEL 7:
sudo yum install php-pecl-zip(注意是pecl-zip,不是php-zip) - CentOS/RHEL 8+:
sudo dnf install php-zip - Alpine(Docker 常见):
apk add php8-zip或apk add php7-zip(必须匹配 PHP 主版本) - macOS + Homebrew:
brew install php@8.2-zip(版本号要和php -v输出一致) - Windows:打开
php --ini显示的php.ini,取消;extension=zip前的分号,并确认extension_dir指向的目录下存在php_zip.dll
装完必须新开终端再验证,因为旧 shell 进程可能还缓存着旧的模块列表。
libzip、unzip、php.ini 多层依赖容易漏掉
尤其在 Docker 或编译安装 PHP 的环境里,装了扩展不等于能用:
-
libzip版本太低(如 CentOS 7 自带 0.10)会导致 PHP 8.0+ 的ZipArchive在解压时崩溃,查法:pkg-config --modversion libzip,要求 ≥ 1.6.0 - Docker Alpine 镜像装了
php8-zip,但没装系统级unzip命令,Composer 默认优先调用它,报错却是zip extension is missing——得补apk add unzip - 某些 PHP 编译安装没自带
zip.so,apt/dnf安装无效,得手动pecl install zip或重编译 - 扩展启用后仍失败?检查
/etc/php/*/cli/conf.d/下是否有其他 .ini 文件覆盖了你的设置
真正卡住人的,从来不是“怎么装”,而是“以为装好了,结果 composer install 还在报错”——这时候得一层层往下挖:CLI 加载的 ini → ini 里写的 so 路径 → so 依赖的系统库版本 → 系统库有没有对应命令。漏一环,全白搭。

















