ext-fileinfo是PHP检测文件真实类型的扩展,解决方法包括Linux安装php-fileinfo、Windows启用php.ini中extension=fileinfo并重启服务验证。

报错明确说“ext-xxx missing”,先确认是哪个扩展
错误信息末尾一定带 ext-xxx,比如 ext-redis、ext-intl、ext-fileinfo。别靠经验猜——ext-intl 和 ext-iconv 在 Laravel/Symfony 里是隐性刚需,漏掉就卡在 install 阶段。
运行 php -m 查当前已启用的扩展,再用 php -i | grep "Loaded Configuration File" 确认 CLI 模式读的是哪个 php.ini(Web 和 CLI 的配置文件常不同)。
Ubuntu/Debian 下快速装扩展的命令
系统默认不装常用扩展,必须手动补全。按需执行:
-
sudo apt install php-cli php-mbstring php-xml php-zip php-curl—— Composer 自身运行必需 -
sudo apt install php-redis—— 对应ext-redis -
sudo apt install php-intl—— 对应ext-intl -
sudo apt install php-gd—— 对应ext-gd -
sudo apt install php-dom—— 对应ext-dom(PHPUnit/Laravel 测试依赖)
如果提示包找不到,加上 PHP 版本号,例如 php8.2-redis 或 php8.1-intl。
立即学习“PHP免费学习笔记(深入)”;
macOS(Homebrew)和 Windows 的关键操作
macOS 上 brew 安装 PHP 后,扩展通常不自动启用:
- 查路径:
php --ini→ 找到类似/opt/homebrew/etc/php/8.2/php.ini的文件 - 追加:
echo "extension=redis.so" >> /opt/homebrew/etc/php/8.2/php.ini(把redis.so换成你要的扩展名) - 验证:
php -m | grep redis
Windows(XAMPP/WAMP)更简单但易忽略细节:
- 打开
php.ini(不是php.ini-development),搜索;extension=php_gd2.dll,删掉前面的分号 - 确保改的是 CLI 模式加载的 ini(
php --ini输出的第一行) - 改完不用重启 Apache,但要关掉所有终端窗口再新开——CLI 进程会缓存旧配置
为什么 --ignore-platform-reqs 不是解法
它只是跳过检查,不是解决缺失:
-
composer install --ignore-platform-reqs:跳过所有平台约束(PHP 版本 + 所有ext-*) -
composer install --ignore-platform-req=ext-redis:只跳过某一个
但装完的包在运行时大概率直接报错,比如 Class 'Redis' not found。CI/CD 或生产环境绝对禁用——它掩盖的是真实环境缺陷,不是问题本身。
最常被忽略的一点:扩展名拼写大小写敏感(ext-redis ≠ ext-Redis),且某些扩展在不同系统下模块名不同(如 CentOS 的 php-pecl-redis,Alpine 的 php82-pecl-redis)。验证永远比猜测快。



















