Composer报“ext-xxx missing”通常因PHP CLI未启用扩展,需用php --ini确认CLI的php.ini路径,检查extension=xxx是否启用,并区分CLI与Web的配置文件。

检查当前PHP环境是否启用目标扩展
Composer安装扩展失败时提示“ext-xxx missing”,不代表系统没装这个扩展,而大概率是当前 Composer 正在调用的 PHP CLI 版本没启用它。先确认 Composer 用的是哪个 PHP:
composer --version
这行命令背后实际调用的是 php 命令,所以得查它:
which php
然后看这个 PHP 是否加载了对应扩展:
php -m | grep xxx
比如缺 ext-pdo_mysql,就运行 php -m | grep pdo_mysql。如果没输出,说明该 PHP 实例确实没启用——别急着重装扩展,先看配置路径:
立即学习“PHP免费学习笔记(深入)”;
php --ini
重点看 Loaded Configuration File 行,打开那个 php.ini,搜索 extension=xxx 是否被注释或拼写错误(如 extension=pdo_mysql.so 在 Linux,extension=php_pdo_mysql.dll 在 Windows)。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
区分 CLI 和 Web 的 php.ini 配置文件
很多开发者卡在这一步:浏览器里 phpinfo() 显示已启用某扩展,但 Composer 仍报错。这是因为 Apache/Nginx 用的是 Web SAPI 的 php.ini,而 Composer 走的是 CLI SAPI,两者配置文件通常不同。
- Web 环境的
php.ini位置,可通过phpinfo()页面顶部的 “Loaded Configuration File” 查到 - CLI 的
php.ini位置,必须执行php --ini查看,不能假设和 Web 一致 - 常见错误:只在 Web 的
php.ini里启用了openssl,但 CLI 的php.ini没开,导致composer install连不上 packagist.org
Linux 下启用扩展的典型操作路径
以 Ubuntu/Debian 为例,安装 mbstring 扩展后仍报错,往往是因为只装了包,没启用模块:
- 先安装扩展包:
sudo apt install php-mbstring(注意不是php7.4-mbstring,除非你明确锁定版本) - 再启用它:
sudo phpenmod mbstring—— 这步会自动在 CLI 的php.ini中写入extension=mbstring - 验证:
php -m | grep mbstring应有输出;php -v不报警告 - 如果用的是多版本 PHP(如同时装了 8.1 和 8.2),需指定版本:
sudo phpenmod -v 8.2 mbstring
CentOS/RHEL 系用户注意:phpenmod 不存在,需手动编辑 /etc/php.d/mbstring.ini 或在主 php.ini 中添加 extension=mbstring。
Windows 下 extension_dir 路径不匹配问题
Windows 用户常遇到:明明 php.ini 里写了 extension=php_curl.dll,但 php -m 不显示,composer install 仍报错。核心原因是 extension_dir 指向错误路径:
- 打开
php.ini,找到extension_dir行,确认它指向的是当前 PHP 版本的ext目录,例如:extension_dir = "C:\php\ext" - 检查该目录下是否存在
php_curl.dll(注意不是curl.dll或其他名字) - 确保 PHP 运行时能读取该目录:权限正常、路径无中文、无空格(如有空格,用短路径名如
C:\PROGRA~1\php\ext测试) - 某些旧版 PHP 安装包把 DLL 放在
ext子目录(如ext\php_curl.dll),但extension_dir指向的是上层,此时要改路径或复制 DLL 到正确位置
最易忽略的一点:修改 php.ini 后,CLI 不需要重启服务,但必须确保没缓存旧配置——删掉 php --ini 显示的 Scan for additional .ini files in 目录下可能存在的冲突 ini 文件。


















