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版本号
Oct 09 PHP
推荐php模板技术[转]
Jan 04 PHP
PHP命令行脚本接收传入参数的三种方式
Aug 20 PHP
PHP中使用匿名函数操作数据库的例子
Nov 17 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
Dec 07 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
PHP实现的限制IP投票程序IP来源分析
May 04 PHP
yii2简单使用less代替css示例
Mar 10 PHP
PHPstorm快捷键(分享)
Jul 17 PHP
PHP编程实现脚本异步执行的方法
Aug 09 PHP
Referer原理与图片防盗链实现方法详解
Jul 03 PHP
PHP使用Http Post请求发送Json对象数据代码解析
Jul 16 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
一个简单的自动发送邮件系统(三)
2006/10/09 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
PHP YII框架开发小技巧之模型(models)中rules自定义验证规则
2015/11/16 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
Javascript技巧之不要用for in语句对数组进行遍历
2010/10/20 Javascript
Javascript this 关键字 详解
2014/10/22 Javascript
JS弹出对话框实现方法(三种方式)
2015/12/18 Javascript
javascript每日必学之运算符
2016/02/16 Javascript
JavaScript String 对象常用方法详解
2016/05/13 Javascript
angularjs使用directive实现分页组件的示例
2017/02/07 Javascript
BootStrap给table表格的每一行添加一个按钮事件
2017/09/07 Javascript
Vue实现导出excel表格功能
2018/03/30 Javascript
webpack配置打包后图片路径出错的解决
2018/04/26 Javascript
JavaScript数组去重算法实例小结
2018/05/07 Javascript
JavaScript实现淘宝京东6位数字支付密码效果
2018/08/18 Javascript
通过cordova将vue项目打包为webapp的方法
2019/02/02 Javascript
vue父子组件的通信方法(实例详解)
2019/11/10 Javascript
Vue将props值实时传递 并可修改的操作
2020/08/09 Javascript
Python写的一个简单监控系统
2015/06/19 Python
Python入门_条件控制(详解)
2017/05/16 Python
python+tifffile之tiff文件读写方式
2020/01/13 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
祖国在我心中演讲稿
2014/01/15 职场文书
四查四看剖析材料
2014/02/14 职场文书
优秀党支部书记事迹材料
2014/05/29 职场文书
中药学自荐信
2014/06/15 职场文书
物业消防安全责任书
2014/07/23 职场文书
幼儿园安全责任书范本
2014/07/24 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
公务员政审材料范文
2014/12/23 职场文书
css3 filter属性的使用简介
2021/03/31 HTML / CSS
Vue如何实现组件间通信
2021/05/15 Vue.js
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
vue实现省市区联动 element-china-area-data插件
2022/04/22 Vue.js
Python 中面向接口编程
2022/05/20 Python