Composer 报 mbstring 缺失是因为 CLI 模式未启用该扩展,需确认 php -m 输出含 mbstring、php --ini 指向正确 php.ini,并按系统(Ubuntu/Debian、Windows、macOS)对应安装或启用扩展,且重启服务或验证 ICU 版本一致性。

Composer 报 The requested PHP extension mbstring is missing,不是没装,而是 CLI 模式下 PHP 根本没加载它——你得先让 php -m 输出 mbstring,否则 Composer 会直接拒跑。
怎么确认 CLI 环境真缺 mbstring
别信浏览器里的 phpinfo() 页面。Composer 走的是命令行(CLI)模式,和 Web 用的不是同一套配置。
- 运行
php -m | grep mbstring:没输出就代表 CLI 确实没启用 - 再跑
php --ini,重点看Loaded Configuration File这一行路径——这才是你要改的php.ini - 如果
php -v显示 PHP 8.2.12,但php --ini加载的是/etc/php/8.1/cli/php.ini,说明你当前 CLI 用的是 PHP 8.1,不是你以为的 8.2
Ubuntu/Debian 下快速补上 mbstring(CLI 专用)
系统包管理器装扩展比手改 php.ini 更可靠,还能自动写启用配置。
- 先查清楚 CLI 实际版本:
php -v(比如输出PHP 8.2.12) - 装对应包:
sudo apt update && sudo apt install php8.2-mbstring—— 版本号必须严丝合缝,php-mbstring可能装到默认版本(比如 8.1),而你 CLI 用的是 8.2 - 装完不用手动改
php.ini:包会自动在/etc/php/8.2/cli/conf.d/下生成20-mbstring.ini,内容就是extension=mbstring - 验证:
php -m | grep mbstring必须有输出,且php -r "var_dump(function_exists('mb_strlen'));"输出bool(true)
Windows(XAMPP/WAMP)启用 mbstring 的三个死点
不是“点了启用就完事”,DLL 文件、路径、服务重启三者缺一不可。
立即学习“PHP免费学习笔记(深入)”;
- 用
php --ini查 CLI 实际读的php.ini(常见路径:C:\xampp\php\php.ini或C:\wamp64\bin\php\php8.2.12\php.ini) - 打开该文件,搜
;extension=mbstring或;extension=php_mbstring.dll,删掉前面的分号;注意 Windows 下通常是extension=php_mbstring.dll,不是mbstring - 确认
extension_dir指向正确目录(如extension_dir = "ext"),且该目录下真有php_mbstring.dll文件(没有就换完整版 PHP 包) - 改完必须重启整个 XAMPP/WAMP 控制面板里的所有服务(Apache + MySQL + PHP),只重启 Apache 不够
macOS Homebrew 用户最容易漏的 ICU 和路径问题
Homebrew 安装的 PHP 不走 /etc/php.ini,而且 mbstring 依赖 ICU,ICU 升级后旧 PHP 可能静默失效。
- CLI 配置路径是:
/opt/homebrew/etc/php/X.X/php.ini(M1/M2)或/usr/local/etc/php/X.X/php.ini(Intel),不是系统级/etc/php.ini - 编辑对应
php.ini,确保有extension=mbstring(macOS 用.so,不是.dll) - 如果之前装过
icu4c并升级过,运行php -r "echo INTL_ICU_VERSION;"看 PHP 编译时绑定的 ICU 版本,再跑icu-config --version看系统实际版本;不一致就会导致mbstring加载失败但无报错 - 临时绕过(仅调试):
composer install --ignore-platform-req=ext-mbstring,但千万别提交到 CI 或上线
真正卡住人的,从来不是“找不到安装命令”,而是 CLI 和 Web 的 PHP 环境彻底割裂——连 php.ini 都不是同一个文件,改了 Web 的配置对 Composer 完全无效。



















