绝大多数情况下无需手动编译,宝塔7.7+版本PHP(7.2~8.3)已内置fileinfo扩展,只需后台勾选启用并重载配置即可;若安装失败,多因内存不足,建议优先添加Swap而非注释common.py。

绝大多数情况下,你不需要手动编译,直接在宝塔后台勾选安装即可生效;但若点击“安装”后无反应或仍报 Class 'finfo' not found,大概率是内存不足导致安装中途失败,而非配置错误。
宝塔后台点一下就装好?先确认 PHP 版本是否 ≥ 7.2
宝塔 7.7+ 版本中,fileinfo 已作为内置模块编译进 PHP(7.2~8.3 全系支持),只是默认未启用。只要你的 PHP 是宝塔官方源安装、且版本在范围内,就不用碰命令行。
- 登录宝塔 → 【软件商店】→ 搜索当前使用的 PHP(如
PHP 8.1)→ 点击右侧【设置】 - 切换到【安装扩展】选项卡 → 找到
fileinfo→ 点击【安装】 - 状态变为“已安装”后,必须点一次【重载配置】(仅重载即可,不需重启 PHP-FPM)
注意:重载配置 和 重启 是两回事——很多用户点了“重启”反而因服务中断导致站点短暂不可用,而 fileinfo 加载只需重载。
安装按钮一直灰色或提示“安装失败”,先查内存和 Swap
1GB 及以下内存的服务器(尤其腾讯云轻量、阿里云共享型)在安装 fileinfo 时极易失败,错误日志里常见 Killed 或 make: *** [apprentice.lo] Error 1,本质是编译过程触发 Linux OOM Killer 杀死了进程。
立即学习“PHP免费学习笔记(深入)”;
- 执行
free -m查看可用内存,若available小于 800MB,基本无法完成编译 - 临时解决:加 1GB Swap(不是“虚拟内存管理”里的图形开关,要手动执行):
dd if=/dev/zero of=/swapfile bs=1M count=1024 chmod 600 /swapfile mkswap /swapfile swapon /swapfile
- 加完再回宝塔点【安装】,成功率接近 100%
别信“改 common.py 注释内存判断”这种方案——它只是绕过宝塔的提示,物理内存不够照样编译失败,还可能让面板后续其他扩展安装也出问题。
确认 fileinfo 是否真加载成功,别只看面板界面
宝塔界面显示“已安装”≠ PHP 运行时能调用 finfo_open()。最可靠的验证方式是命令行检测:
- 执行
php -m | grep fileinfo,有输出即表示模块已加载 - 若无输出,检查
php.ini是否真写入了extension=fileinfo.so:grep "fileinfo" /www/server/php/81/etc/php.ini
- 注意路径:宝塔的
fileinfo.so文件实际位置通常是/www/server/php/81/lib/php/extensions/no-debug-non-zts-20210902/fileinfo.so(后缀随 PHP 版本变化),确保php.ini中没写错路径或重复添加
常见陷阱:有人复制了整行 extension = /path/to/fileinfo.so,但路径里多了一个空格或换行符,导致 PHP 忽略该行——用 grep -n 定位行号后手动编辑更稳妥。
ThinkPHP/Laravel 部署时 fileinfo 报错,往往卡在伪静态或目录设置上
即使 php -m 显示 fileinfo 已加载,Laravel 的 composer install 或 ThinkPHP 的自动检测仍可能报错,这时问题通常不在扩展本身:
- 确认网站根目录是否指向项目
/public目录(非项目根目录),否则index.php无法加载框架启动逻辑 - 伪静态规则是否正确:TP6 必须用
location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } },Nginx 配置错误会导致请求根本没进 PHP,自然检测不到扩展 - CLI 和 Web 使用的 PHP 配置可能不同:用
php -i | grep "Loaded Configuration File"查 CLI 加载的php.ini,再对比宝塔里设置的 Web 环境所用配置文件路径是否一致
真正难排查的,是 CLI 和 Web 两个环境用了不同 php.ini,结果你在面板里启了扩展,但 composer 走的是另一个没启的配置——这点连很多老手都会忽略。



















