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学习之PHP表达式
Oct 09 PHP
php 购物车实例(申精)
May 11 PHP
用PHP的超级变量$_GET获取HTML表单(Form) 数据
May 07 PHP
Array of country list in PHP with Zend Framework
Oct 17 PHP
PHP对文件夹递归执行chmod命令的方法
Jun 19 PHP
ThinkPHP表单数据智能写入create方法实例分析
Sep 27 PHP
学习php设计模式 php实现工厂模式(factory)
Dec 07 PHP
PHP递归遍历指定文件夹内的文件实现方法
Nov 15 PHP
PHP实现上传多图即时显示与即时删除的方法
May 09 PHP
PHP实现的链式队列结构示例
Sep 15 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 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
php缓存技术介绍
2006/11/25 PHP
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
2011/12/16 PHP
php中的依赖注入实例详解
2019/08/14 PHP
JavaScript 获取用户客户端操作系统版本
2009/08/25 Javascript
json数据与字符串的相互转化示例
2013/09/18 Javascript
instanceof和typeof运算符的区别详解
2014/01/06 Javascript
jquery中的$(document).ready()使用小结
2014/02/14 Javascript
JavaScript中判断整数的多种方法总结
2014/11/08 Javascript
jQuery对于显示和隐藏等常用状态的判断方法
2014/12/13 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
3种js实现string的substring方法
2015/11/09 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
jQuery下拉框的简单应用
2016/06/24 Javascript
jquery.uploadifive插件怎么解决上传限制图片或文件大小问题
2017/05/08 jQuery
Angularjs的键盘事件的绑定
2017/07/27 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
Vue项目自动转换 px 为 rem的实现方法
2018/10/29 Javascript
[49:43]VG vs FNATIC 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
python实现车牌识别的示例代码
2019/08/05 Python
python爬虫 基于requests模块发起ajax的get请求实现解析
2019/08/20 Python
python生成大写32位uuid代码
2020/03/03 Python
tensorflow模型转ncnn的操作方式
2020/05/25 Python
在keras中model.fit_generator()和model.fit()的区别说明
2020/06/17 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
装上这 14 个插件后,PyCharm 真的是无敌的存在
2021/01/11 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
JD Sports马来西亚:英国领先的运动鞋和运动服饰零售商
2018/03/13 全球购物
英国最大的独立摄影零售商:Park Cameras
2019/11/27 全球购物
林肯就职演讲稿
2014/05/19 职场文书
电话客服专员岗位职责
2014/06/28 职场文书
2015年科普工作总结
2015/07/23 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
2016学雷锋优秀志愿者事迹材料
2016/02/25 职场文书
JVM之方法返回地址详解
2022/02/28 Java/Android