PHP文件类型检查及fileinfo模块安装使用详解


Posted in PHP onMay 09, 2019

在web系统开发中,文件上传功能是非常常见的功能,这个功能开发中有一个非常关键的步骤:文件类型检查,这对于系统安全性起着很重要的作用,也是一个合格的程序员必须要做的。那么在PHP 中如何进行文件类型检查呢?

文件类型检查方法

在回答这个问题之前, 首先看一下你的 PHP 版本,因为不同版本可能方法不同:

在 PHP 5.3之前,可以使用mime_content_type方法检查;

但是 PHP 5.3之后, 这个方法被废弃了,原因是这个方法存在比较多的问题;

这里建议大家把 PHP 5.3以下版本进行升级,因为PHP7都出来了, 你还在用PHP5.2 甚至更老的版本,这完全不符合互联网圈快速迭代,与时俱进的风格。不开玩笑的讲, PHP7确实有非常大的性能提升。

所以呢,我们只说一下 PHP 5.3 以后的文件类型检查方法:使用fileinfo库

fileinfo模块的使用方法

官方文档中对于 fileinfo 模块的简介:本模块中的函数通过在文件的给定位置查找特定的 魔术 字节序列 来猜测文件的内容类型以及编码。 虽然不是百分百的精确, 但是通常情况下能够很好的工作。

先上代码吧

$fileName = 'www.pythontab.com.png';
$fip = finfo_open(FILEINFO_MIME); // 返回 mime 类型
echo finfo_file($fip, $fileName);
finfo_close($fip);

这样就可以直接输出文件的 Mime 类型了,还是比较简单的。

fileinfo 模块安装

但是, PHP 默认并没有开启 fileinfo 模块,默认不会安装这个库, 所以我们要自己安装一下才可以使用。

下面来看下如何安装 fileinfo 模块:

1 下载扩展包

根据各自的版本号进行下载

wget -O php-5.6.25.tar.gz http://cn2.php.net/get/php-5.6.25.tar.gz/from/this/mirror

这里也可以单独下载 fileinfo 包

wget -O http://pecl.php.net/get/Fileinfo-1.0.4.tgz

2 解压

tar -zxvf php-5.6.25.tar.gz

3 进入该扩展目录

cd /soft_src/php/php-5.6.25/ext/fileinfo

4 编译 && 安装

/usr/local/php/bin/phpize
./configure -with-php-config=/usr/local/php/bin/php-config
make && make install

这样,就会在系统默认的扩展目录下新生成一个fileinfo.so文件

5 修改php.ini文件

vim /usr/local/php/etc/php.ini

加入:extension=fileinfo.so

重启 php, 至此安装完成

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP 数据库树的遍历方法
Feb 06 PHP
php+mysql事务rollback&commit示例
Feb 08 PHP
php 冒泡排序 交换排序法
May 10 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
Jan 17 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
PHP实现数字补零功能的2个函数介绍
May 12 PHP
php数组保存文本与文本反编成数组实例
Nov 13 PHP
PHP网站开发中常用的8个小技巧
Feb 13 PHP
php常用表单验证类用法实例
Jun 18 PHP
laravel框架与其他框架的详细对比
Oct 23 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 PHP
php使用mysqli和pdo扩展,测试对比mysql数据库的执行效率完整示例
May 09 #PHP
php使用mysqli和pdo扩展,测试对比连接mysql数据库的效率完整示例
May 09 #PHP
PHP CURL中传递cookie的方法步骤
May 09 #PHP
PHP正则表达式处理函数(PCRE 函数)实例小结
May 09 #PHP
Laravel配置全局公共函数的方法步骤
May 09 #PHP
Laravel Validator自定义错误返回提示消息并在前端展示
May 09 #PHP
PHP正则表达式笔记与实例详解
May 09 #PHP
You might like
PHP读取文件并可支持远程文件的代码分享
2012/10/03 PHP
php指定长度分割字符串str_split函数用法示例
2017/01/30 PHP
ThinkPHP3.2框架使用addAll()批量插入数据的方法
2017/03/16 PHP
php精度计算的问题解析
2019/06/21 PHP
jQuery EasyUI API 中文文档 - Tree树使用介绍
2011/11/19 Javascript
js使用函数绑定技术改变事件处理程序的作用域
2011/12/26 Javascript
jQuery之$(document).ready()使用介绍
2012/04/05 Javascript
13 个JavaScript 性能提升技巧分享
2012/07/26 Javascript
基于jquery中children()与find()的区别介绍
2013/04/26 Javascript
javascript使用数组的push方法完成快速排序
2014/09/15 Javascript
jquery实现图片随机排列的方法
2015/05/04 Javascript
js中最容易被忽视的事件问题大总结
2016/05/15 Javascript
清除输入框内的空格
2016/12/21 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
浅谈Vue下使用百度地图的简易方法
2018/03/23 Javascript
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
python 写入csv乱码问题解决方法
2016/10/23 Python
Django实现快速分页的方法实例
2017/10/22 Python
简单实现python画圆功能
2018/01/25 Python
Python模拟自动存取款机的查询、存取款、修改密码等操作
2018/09/02 Python
用xpath获取指定标签下的所有text的实例
2019/01/02 Python
Python中使用threading.Event协调线程的运行详解
2020/05/02 Python
python3.8.1+selenium实现登录滑块验证功能
2020/05/22 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
法国太阳镜店:Sunglasses Shop
2016/08/27 全球购物
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
如何进行Linux分区优化
2016/09/13 面试题
环境科学专业个人求职信
2013/09/26 职场文书
个人自荐书
2013/12/20 职场文书
宠物店的创业计划书范文
2014/01/11 职场文书
五十岁生日宴会答谢词
2014/01/15 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
2016年度继续教育学习心得体会
2016/01/19 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书