宝塔7.7+版本PHP已内置fileinfo扩展,只需后台勾选启用即可,无需重编译;若提示“安装失败”,多因宝塔内存限制(512MB)触发,可注释common.py中相关判断逻辑临时绕过,但需确保物理内存充足。

宝塔面板里 PHP 缺少 fileinfo 扩展,直接启用就行,不用重编译
宝塔 7.7+ 版本默认已内置 fileinfo 扩展(PHP 7.2~8.3 均支持),只是没启用。强行重编译不仅没必要,还容易因内存不足失败或破坏现有环境。
正确做法是进宝塔后台 → 软件商店 → 找到你当前用的 PHP 版本 → 点击“设置” → 切换到“安装扩展”页 → 勾选 fileinfo → 点击“安装”。整个过程不到 10 秒,无需重启 PHP。
如果勾选后提示“安装失败”,大概率是内存触发了宝塔的保护机制——它默认限制单次编译操作最多使用 512MB 内存,而部分扩展(尤其带依赖的)在 configure 阶段会临时吃高内存。
解除宝塔 PHP 编译时的内存限制
宝塔把内存限制写死在 /www/server/panel/class/common.py 里,靠改配置文件无效。必须手动注释掉相关判断逻辑:
立即学习“PHP免费学习笔记(深入)”;
- 备份原文件:
cp /www/server/panel/class/common.py /www/server/panel/class/common.py.bak - 编辑该文件,找到类似以下这段(位置通常在
def check_mem(self):或附近):if int(mem_total) < 1024: raise Exception('内存不足')或更常见的:if int(mem_free) < 524288: raise Exception('内存不足,请释放内存后重试') - 把整行
raise Exception(...)前面加#注释掉,保存退出 - 重启面板:
bt restart
注意:这只是绕过宝塔的“提醒式拦截”,不解决物理内存不足问题。如果你的机器只有 512MB 内存,即使绕过限制,make 过程仍可能因 OOM 被系统 kill。
真要重编译 fileinfo 的话,别用宝塔界面点“编译安装”
宝塔的“编译安装”按钮本质是调用源码编译流程,但它的构建路径和参数不透明,出错难排查。真遇到极端情况(比如自定义 PHP 源码路径、打过补丁),建议手动走标准流程:
- 确认 PHP 源码存在:
/www/server/php//src/ext/fileinfo/(如/www/server/php/80/src/ext/fileinfo/) - 进入该目录,执行:
/www/server/php/80/bin/phpize<br>./configure --with-php-config=/www/server/php/80/bin/php-config<br>make && make install
- 检查生成的
fileinfo.so是否在/www/server/php/80/lib/php/extensions/no-debug-non-zts-20201009/下 - 手动编辑
/www/server/php/80/etc/php.ini,确保有:extension=fileinfo.so
- 重启 PHP:
service php-fpm-80 reload
这个流程跳过了宝塔的封装层,可控性强,也方便看 make 输出里的真实报错(比如缺 libmagic 开发包)。
为什么你总卡在“内存不足”,其实跟 fileinfo 关系不大
fileinfo 本身极轻量,编译耗内存不到 100MB。你反复看到“内存不足”,真正瓶颈通常是:
- 宝塔后台开着多个日志页面、监控图表,长期运行后 Python 进程吃掉大量内存
- PHP 正在处理大文件上传或图像缩略图,
memory_limit设得过高(如 512M),导致系统可用内存被提前占满 - 服务器开了 swap 但 IO 极慢,
make时频繁换页,看起来像卡死
建议先执行 free -h 和 ps aux --sort=-%mem | head -10 看实时内存大户,再决定要不要杀进程或加 swap。硬改宝塔代码只是把错误提示藏起来,不是解决问题。



















