答案:报ext-xxx缺失是php cli环境未加载对应扩展,需用php -m | grep xxx验证、php --ini定位配置文件,再按系统安装并启用扩展。

报 ext-xxx 缺失,不是包有问题,而是你当前 PHP CLI 环境没加载那个扩展——composer install 会卡在第一步,根本不会去下载任何包。
怎么快速定位是哪个扩展没启用
错误信息里明确写了,比如:The requested PHP extension ext-mbstring is missing。重点就是 ext- 后面那部分:mbstring、curl、zip、gd、intl……这些就是你要处理的扩展名。
别凭感觉猜,直接验证:
- 运行
php -m | grep mbstring(把mbstring换成报错里的名字) - 如果没输出,说明 CLI 下确实没加载
- 再跑
php --ini,看Loaded Configuration File指向哪个php.ini—— 这个文件才是 Composer 真正在读的
Ubuntu/Debian 上装 ext-zip、ext-curl 等常见扩展
系统包管理器把扩展和 PHP 版本强绑定,不能只装 php-zip 就完事。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- 先确认 CLI 的 PHP 版本:
php -v(比如输出PHP 8.2.12) - 对应安装带版本号的包:
sudo apt install php8.2-zip php8.2-curl php8.2-mbstring php8.2-xml - 装完后,
php -m | grep zip应该有输出;若仍无,可能是 CLI 模块没自动启用,补上:sudo phpenmod -v 8.2 zip - 不用重启终端,但建议执行
hash -r php清掉可能的二进制缓存
macOS Homebrew 用户常漏的关键步骤
Homebrew 安装的 PHP(如 php@8.2)默认不启用所有扩展,且 php.ini 可能压根没加载 conf.d/ 目录。
- 查配置路径:
php --ini,通常指向/opt/homebrew/etc/php/8.2/php.ini - 打开这个
php.ini,确认里面有这行(没有就手动加):scanpath = "/opt/homebrew/etc/php/8.2/conf.d" - 确保扩展已安装:
brew install php@8.2-zip php@8.2-intl - 检查
/opt/homebrew/etc/php/8.2/conf.d/ext-zip.ini是否存在,内容是否为extension="zip" - 如果
php -m | grep zip仍失败,运行php -i | grep extension_dir,看路径是否匹配实际.so文件位置
Windows(XAMPP/WAMP)启用 php_mbstring.dll 失败的真正原因
不是忘了取消分号,而是 CLI 和 Web 用的是两套配置,甚至两个 php.ini 文件。
- 运行
php --ini,注意输出里的Loaded Configuration File—— 很可能是C:\xampp\php\php-cli.ini,而不是你常改的那个php.ini - 打开它,搜索
extension=php_mbstring.dll,去掉前面的; - 确认
extension_dir设置正确,比如:extension_dir = "ext",然后检查php/ext/目录下是否存在php_mbstring.dll - 如果 DLL 文件缺失或架构不匹配(x64 PHP 配了 x86 DLL),
php -m不报错,但extension_loaded('mbstring')返回false - 改完不用重启服务,直接重跑
composer install
最易被忽略的一点:GD、Intl、Zip 这类扩展依赖系统级库(libpng、icu、zlib),光启 extension=gd 不够;php -r "new ZipArchive();" 或 php -r "print_r(gd_info());" 才是真验证,不是 php -m 显示了就算数。










