应先确认 Composer 调用的 PHP 路径及对应 php.ini,检查并启用缺失扩展(如 extension=intl),再验证扩展功能是否真正可用(如 php -r "new ZipArchive();"),而非仅依赖 php -m 输出。

Composer 报 “The requested PHP extension xxx is missing” 怎么办
这不是 Composer 的 bug,是它在启动前做的一次环境体检——发现你缺了项目 composer.json 里声明依赖的扩展(比如 ext-intl、ext-mbstring),就直接拒载,不让你往下走。
关键不是“怎么让 Composer 跳过去”,而是“哪个 PHP 在跑 Composer、它到底有没有那个扩展”。很多人改了 Apache 的 php.ini,终端里跑 composer install 还是一样报错,就是因为 CLI 和 Web 用的压根不是同一个配置。
- 先查 Composer 实际调用的 PHP:
composer diagnose看输出里的PHP binary路径 - 再查这个 PHP 是否加载了目标扩展:
php -m | grep intl(把intl换成报错里的名字) - 确认它读的是哪个
php.ini:php --ini,然后打开对应文件,检查是否有extension=intl(Linux/macOS)或extension=php_intl.dll(Windows) - 别信
phpinfo()页面——那是 Web SAPI 的,和命令行无关
Linux/macOS 下装 ext-intl、ext-zip 这类扩展为什么装了还报错
因为系统包管理器安装的扩展名和 PHP 版本强绑定,且不同发行版命名规则不同。Ubuntu/Debian 要求你写全版本号,比如 PHP 8.2 就得装 php8.2-intl,只装 php-intl 可能什么也不干;macOS Homebrew 更麻烦,brew install php@8.2 默认不带 intl,得额外跑 brew install php@8.2-intl,而且它不会自动往 php.ini 里加 extension="intl",得手动补上。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- Ubuntu/Debian:
sudo apt install php8.2-intl php8.2-zip php8.2-mbstring(版本号必须和php -v输出一致) - macOS Homebrew:
brew install php@8.2-intl php@8.2-zip,然后检查/opt/homebrew/etc/php/8.2/php.ini(M1/M2)或/usr/local/etc/php/8.2/php.ini(Intel)是否含extension="intl" - 装完必须重启 PHP-FPM 或 Apache,但 CLI 不需要重启——只要重新运行命令就行
Windows 下启用 php_zip.dll 或 php_mbstring.dll 总失败
常见问题不是没取消分号,而是路径错了、DLL 找不到、或者用了不匹配的 PHP 架构(x64 vs x86)。XAMPP/WAMP/Laragon 都可能为 CLI 单独生成一个 php-cli.ini,你改了主 php.ini,CLI 根本不认。
- 先运行
php --ini,看输出里Loaded Configuration File是哪个路径,就去改那个文件 - 确认
extension_dir指向正确:php -r "echo ini_get('extension_dir');",然后进该目录看是否存在php_zip.dll - 某些旧版 PHP(如 7.4)依赖
libiconv.dll,若缺失,mbstring会静默加载失败——把它复制到 PHP 安装根目录(和php.exe同级) - 改完配置后,关掉所有终端窗口再重开,否则可能缓存旧的
php路径
为什么 php -m 显示 zip 已加载,Composer 还报 “ZipArchive class not found”
因为 php -m 只说明扩展模块加载成功,不代表 ZipArchive 类真能用。PHP 编译时如果没链接对 libzip,或者系统 libzip 版本太老(比如 Ubuntu 20.04 自带的 1.6.1),就会出现“扩展存在但类不可用”的假象。
- 验证真实可用性:
php -r "new ZipArchive();"—— 不报错才算过关 - 更严一点:
php -r "echo ZIPARCHIVE::CHECKSUM_CRC32;",能输出数字才代表完整功能就绪 - Docker 用户尤其注意:Alpine 镜像默认无
libzip-dev,光apk add php82-zip不够,还得apk add libzip-dev并确保 PHP 是带 zip 支持编译的 - 错误藏得深:只有加
-v参数运行composer install -v,才能看到类似libzip version too old的提示
最常被忽略的点:PHP 多版本共存时,which php 和 composer 调用的未必是同一个二进制;php --ini 查到的配置文件,也未必是你以为正在编辑的那个。盯住诊断输出,比反复重装扩展有用得多。

















