先确认Composer实际使用的PHP版本和CLI配置,再按环境安装对应扩展并验证php -m输出——不同PHP安装方式(系统包、Homebrew、XAMPP、Docker)启用扩展的方法及路径各不相同,需匹配extension_dir与ini加载顺序。

Composer 报错 “The requested PHP extension xxx is missing” 怎么办
直接看报错里缺哪个扩展,装它就行——但别盲目 apt install 或 pecl install,PHP CLI 和 Web SAPI 的扩展常不在同一套环境里, Composer 只认 php -m 输出的模块,而你改的可能是 Apache 或 Nginx 用的 php.ini。
确认 Composer 实际调用的是哪个 PHP 版本和配置
很多人以为 which php 就是 Composer 用的,其实不一定。Composer 会优先读取 PHP_BINARY 环境变量,其次才是系统 PATH。最稳妥的方式是:
- 运行
php -v和composer --version,对比 PHP 版本是否一致 - 运行
php -i | grep "Loaded Configuration File",看 CLI 模式加载的是哪个php.ini - 运行
php -m | grep xxx(把xxx换成报错里的扩展名),确认该扩展真没启用 - 如果用的是 Docker、Homestead 或 MAMP,注意它们自带的 PHP CLI 可能完全独立,
sudo apt install php-xxx装的包对它无效
常见缺失扩展的安装方式差异(以 mbstring、xml、curl 为例)
不同系统、不同 PHP 安装方式,启用扩展的路径完全不同:
- Ubuntu/Debian(系统源 PHP):
sudo apt install php-mbstring,然后确保/etc/php/*/cli/conf.d/20-mbstring.ini存在且未被注释 - macOS + Homebrew PHP:
brew install php@8.2默认带常用扩展,但若换版本需重装,php -m不显示说明没链接成功,检查$(brew --prefix)/etc/php/8.2/conf.d/ext-mbstring.ini - Windows + XAMPP/WAMP:打开对应目录下的
php.ini,取消;extension=mbstring前的分号,重启命令行(不是浏览器) - Docker(
php:8.2-cli):Dockerfile 中加RUN docker-php-ext-install mbstring xml curl,不能只写apt-get install,那装的是系统级包,不是 PHP 扩展
扩展已装但 Composer 仍报错?重点查 ini 加载顺序和 .so 文件路径
扩展 .so 文件存在、ini 文件也启用了,还是报错,大概率是 PHP CLI 没加载到——因为 extension_dir 配置错了,或 ini 文件被覆盖了:
立即学习“PHP免费学习笔记(深入)”;
- 运行
php --ini,看 “Scan for additional .ini files in” 路径下有没有你加的扩展配置 - 运行
php -r "echo ini_get('extension_dir');",确认输出路径下真有mbstring.so这类文件 - 某些一键环境(如 Laragon)会为 CLI 单独生成
php-cli.ini,改了php.ini没用 - Mac 上用
brew装的 PHP,extension_dir常指向/opt/homebrew/lib/php/pecl/.../,但php.ini里写的可能是旧路径,得手动同步
扩展依赖关系容易被忽略:比如 intl 扩展依赖系统级 libicu,装完 php-intl 后还报错,就得先 brew install icu4c 或 apt install libicu-dev。这类底层依赖不报“扩展缺失”,而是直接让 php -m 加载失败,导致 Composer 认为扩展不存在。











