phpfileinfo扩展没有开启
早上九点,展没客户那边的有开运维发来一张截图,WordPress后台一片红,展没提示缺少fileinfo扩展。有开我第一反应是展没“又来了”。这玩意儿在虚拟主机上尤其常见,有开PHP版本从7.4升到8.1,展没或者从宝塔面板切到Docker环境,有开十有八九会踩这个坑。展没 fileinfo不是有开那种花哨的扩展,它干的展没事情很底层——通过读取文件头部的魔数来判断文件真实类型。没有它,有开你的展没上传功能可能照常工作,但图片校验会失效。有开更麻烦的展没是,Composer依赖它,Laravel的验证规则里 检查方法很简单。命令行敲 分情况处理。如果你是宝塔用户,面板里找到PHP设置,点开“安装扩展”标签,fileinfo通常列在“未安装”列表里,点一下安装,等半分钟重启PHP-FPM就完事。这个过程最省心,但前提是你用的不是那种阉割版面板——我遇到过某IDC自研面板,压根没有扩展管理功能,只能走命令行。 命令行环境就得自己编译。以Ubuntu为例,先装依赖: Docker容器又是另一套玩法。如果你用的是官方PHP镜像,启动时加 还有种隐蔽情况。PHP-FPM和CLI的配置可能是分开的。你在命令行里看到fileinfo已加载,但网站还是报错。这时候要检查 最后说个偏方。有些老项目用的是PHP 5.6甚至更早版本,官方源里可能没有对应的fileinfo包。这时候可以试试PECL: 开完扩展记得重启服务。Apache用 说到底,fileinfo不是那种需要天天打交道的扩展,但一旦缺了它,各种诡异问题就会冒出来。下次再遇到上传文件报错,先别急着查代码,看一眼phpinfo,也许问题就出在这样一个不起眼的开关上。mimes:jpg这种写法直接依赖fileinfo。我见过最离谱的案例是某电商后台,商品图片传上去全是乱码,排查了三天数据库编码问题,最后发现是fileinfo没开,系统把PNG当成文本存了。php -m,看输出列表里有没有fileinfo。或者写个探针文件,放上phpinfo();,浏览器打开搜“fileinfo”。如果没找到,那就得动手开。apt-get install php-dev libmagic-dev。然后进PHP源码目录的ext/fileinfo,执行phpize,接着./configure,make,make install。最后在php.ini里加一行extension=fileinfo.so。这套流程看着繁琐,但真正耗时的其实是编译过程——取决于机器性能,可能三分钟也可能半小时。有一次我在2核4G的云服务器上编译,CPU直接拉满,网站访问都卡了。docker-php-ext-install fileinfo就行。但要注意,这个命令必须在容器构建阶段执行,不能在运行中的容器里直接跑。我见过有人用docker exec进容器手动装,结果容器一重启全没了——镜像没变,装的东西全丢。php-fpm -i的输出,或者看phpinfo()里的“Loaded Configuration File”路径。很多时候,CLI用的是/etc/php/8.1/cli/php.ini,而FPM用的是/etc/php/8.1/fpm/php.ini。改错文件,等于白忙活。pecl install fileinfo。但说实话,PHP 5.6都快十年了,真遇到这种情况,我建议直接升级PHP版本,别在旧版本上折腾——安全漏洞一堆,扩展兼容性也差,没必要给自己埋雷。systemctl restart apache2,Nginx加PHP-FPM就重启php-fpm。重启完再跑一次探针,确认fileinfo出现在输出里。这一步别省,我见过太多人改完配置不重启,然后一脸懵地来问“为什么还是不行”。
-
上一篇
-
下一篇
- 最近发表
- 随机阅读
- 搜索
-
- 友情链接
-