Composer 安装失败因 CLI PHP 未启用 mbstring 扩展,根本原因是 Web 与 CLI 使用不同 php.ini;需运行 php --ini 确认 CLI 配置路径,并检查对应文件中 extension=mbstring 是否启用且扩展文件存在。

Composer 安装失败,报错说缺 mbstring 扩展?不是没装,而是 PHP CLI 用的不是你以为的那个 PHP 配置。
为什么 php -v 显示有 mbstring,但 composer 还是报错?
常见现象:浏览器里 phpinfo() 看到 mbstring 已启用,终端执行 php -m | grep mbstring 却没输出;或者 composer install 仍提示 The requested PHP extension mbstring is missing from your system。
根本原因:Web 服务器(如 Apache/Nginx)和 CLI(命令行)可能使用不同的 php.ini 文件,而 mbstring 只在 Web 版本的配置里启用了。
- 运行
php --ini查看 CLI 加载的是哪个php.ini - 检查该文件里是否包含
extension=mbstring(Linux/macOS)或extension=php_mbstring.dll(Windows) - 确认该扩展文件真实存在:
php -r "echo ini_get('extension_dir');"+ 对应目录下是否有mbstring.so或php_mbstring.dll
Ubuntu/Debian 下快速启用 mbstring(CLI)
如果你用系统包管理器装的 PHP(比如 php8.1),mbstring 通常作为独立扩展包提供,需手动启用。
- 先查 PHP 版本:
php -v(比如输出PHP 8.1.2) - 安装对应扩展:
sudo apt install php8.1-mbstring(版本号必须严格匹配) - 扩展会自动写入 CLI 的
php.ini,无需手动编辑 - 验证:
php -m | grep mbstring应该有输出
macOS(Homebrew)或 Windows 手动启用的坑
Homebrew 默认不自动启用扩展;Windows 则容易忽略 php.ini 路径或 DLL 依赖。
- macOS:改的是
/opt/homebrew/etc/php/<version>/php.ini</version>(M1/M2)或/usr/local/etc/php/<version>/php.ini</version>(Intel),不是/etc/php.ini - Windows:确保
extension_dir指向正确的ext/目录,且php_mbstring.dll文件存在;某些旧版 PHP 还需把libiconv.dll放到php.exe同目录 - 改完配置后,必须重启终端(尤其 macOS zsh/bash 配置可能缓存了
php路径)
验证 composer 是否真能用了
别急着跑 composer install,先做最小闭环验证:
- 执行
php -m | grep mbstring—— 必须有输出 - 执行
php -r "var_dump(function_exists('mb_strlen'));"—— 应输出bool(true) - 再跑
composer --version—— 不报 mbstring 缺失才算过
真正卡住人的,往往不是“装不装得上”,而是 CLI 和 Web 的 PHP 环境彻底隔离,连 php.ini 都不是同一个。盯住 php --ini 的输出,比反复重装 PHP 有用得多。










