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 相关文章推荐
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
PHP中文分词 自动获取关键词介绍
Nov 13 PHP
PHP 登录记住密码实现思路
May 07 PHP
php的curl封装类用法实例
Nov 07 PHP
php实现使用正则将文本中的网址转换成链接标签
Dec 03 PHP
php中adodbzip类实例
Dec 08 PHP
PHP实现获取FLV文件的时间
Feb 10 PHP
php中switch与ifelse的效率区别及适用情况分析
Feb 12 PHP
PHP的数组中提高元素查找与元素去重的效率的技巧解析
Mar 03 PHP
Laravel中间件实现原理详解
Oct 09 PHP
Laravel框架路由设置与使用示例
Jun 12 PHP
通过PHP实现获取访问用户IP
May 09 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
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PHP实现限制IP访问的方法
2017/04/20 PHP
PHP仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
2017/11/14 PHP
Yii框架模拟组件调用注入示例
2019/11/11 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
js获取IP和PcName(IE)在vs中可用
2013/08/02 Javascript
node.js中的fs.lstatSync方法使用说明
2014/12/16 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
JS实现动态表格的添加,修改,删除功能(推荐)
2016/06/15 Javascript
基于jQuery实现弹出可关闭遮罩提示框实例代码
2016/07/18 Javascript
Angular懒加载机制刷新后无法回退的快速解决方法
2016/08/30 Javascript
Vuex之理解Store的用法
2017/04/19 Javascript
react-native-tab-navigator组件的基本使用示例代码
2017/09/07 Javascript
jQuery中$原理实例分析
2018/08/13 jQuery
解决vue打包后vendor.js文件过大问题
2019/07/03 Javascript
Vue修改项目启动端口号方法
2019/11/07 Javascript
[29:59]完美世界DOTA2联赛PWL S3 Forest vs access 第二场 12.11
2020/12/13 DOTA
pycharm 使用心得(一)安装和首次使用
2014/06/05 Python
python多重继承新算法C3介绍
2014/09/28 Python
简单谈谈Python中的反转字符串问题
2016/10/24 Python
Python入门_条件控制(详解)
2017/05/16 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
python笔记之mean()函数实现求取均值的功能代码
2019/07/05 Python
Python定时任务随机时间执行的实现方法
2019/08/14 Python
python操作gitlab API过程解析
2019/12/27 Python
canvas裁剪clip()函数的具体使用
2018/03/01 HTML / CSS
Hoka One One法国官网:美国专业跑鞋品牌
2018/12/29 全球购物
西班牙土拨鼠床垫公司,感觉在云端:Marmota
2019/03/18 全球购物
行政助理岗位职责范文
2013/12/03 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
2014财务人员自我评价范文
2014/09/21 职场文书
反四风对照检查材料
2014/09/22 职场文书
2019年鼓励无偿献血倡议书
2019/09/17 职场文书
Redis实战高并发之扣减库存项目
2022/04/14 Redis
Nginx 安装SSL证书完成HTTPS部署
2022/04/28 Servers