composer 报错“ext-xxx 缺失”指 php cli 模式下未启用对应扩展,需通过 php -m 验证、修改正确的 php.ini(php --ini 查看路径)、按系统安装扩展并重启服务,且 cli 与 web 的配置可能不同。

Composer 安装或更新时提示 PHP 扩展缺失(如 ext-curl、ext-zip、ext-openssl 等),不是 Composer 本身的问题,而是它在运行前会校验当前 PHP 环境是否满足依赖要求。报错直接阻断执行,必须先补全扩展才能继续。
看懂报错信息里那个 ext-xxx 到底指什么
Composer 的报错通常长这样:The requested PHP extension ext-zip is missing from your system. 这里的 ext-zip 不是某个包名,而是 PHP 内置扩展的“包名式标识”,对应实际加载的 zip.so(Linux/macOS)或 php_zip.dll(Windows)。它不等于你系统里有没有 unzip 命令,也不等于 PHP 是否支持 ZIP 功能——关键看这个扩展是否被启用。
- 用
php -m | grep zip(Linux/macOS)或php -m(Windows)确认扩展是否已加载 - 用
php --ini查到Loaded Configuration File路径,再打开该php.ini文件,搜索extension=zip或extension=php_zip.dll - 如果行存在但被分号注释了(如
;extension=zip),去掉分号;如果整行不存在,需手动添加(注意 Windows 和类 Unix 系统的写法差异)
不同系统下启用常见缺失扩展的实际操作
扩展启用方式取决于你的 PHP 安装来源(系统包管理器、第三方源、或手动编译),不能只改 php.ini 就完事。
- Ubuntu/Debian:运行
sudo apt install php-zip php-curl php-xml php-mbstring php-opcache,然后重启 Web 服务(如sudo systemctl restart apache2或sudo systemctl restart php8.2-fpm) - CentOS/RHEL:用
sudo yum install php-zip php-curl php-xml php-mbstring(或dnf),之后同样要重启 PHP-FPM 或 Apache - macOS(Homebrew PHP):扩展通常随 PHP 一起安装,但默认可能未启用。检查
$(brew --prefix)/etc/php/*/php.ini,取消对应extension=行的注释;若提示找不到模块,先运行brew install php@8.2-zip(版本号按需替换) - Windows(XAMPP/WAMP):打开控制面板 → PHP 设置 → 扩展列表,勾选
curl、openssl、zip等;或手动编辑php.ini,确保extension_dir指向正确的ext目录,且各extension=php_*.dll行未被注释
为什么 php -v 显示正常,但 composer install 还是报缺扩展?
因为 CLI(命令行)和 Web SAPI(如 Apache/FPM)可能使用不同的 php.ini 文件,也可能是不同版本的 PHP。Composer 默认走 CLI SAPI,所以它读的是 php -i | grep "Loaded Configuration File" 输出的那个配置,而不是浏览器里 phpinfo() 显示的那个。
- 运行
php -m和composer diagnose,对比两者的扩展列表差异 - 如果你用的是 Docker,确认容器内 CLI PHP 的
php.ini和扩展路径是否与镜像文档一致(例如php:8.2-cli镜像默认不含zip,需docker-php-ext-install zip) - 某些共享主机禁用了 CLI 的部分扩展(出于安全限制),这时
composer install必然失败,只能换环境或联系服务商开启
最常被忽略的一点:扩展启用后,必须确认 PHP CLI 实际加载了它,而不是你以为“改完 php.ini 就好了”。多一次 php -m 验证,比反复重试 composer update 更省时间。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











