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 相关文章推荐
example1.php
Oct 09 PHP
PHP使用者状态管理功能的应用
Oct 09 PHP
Discuz 模板引擎的封装类代码
Jul 18 PHP
PHP编程风格规范分享
Jan 15 PHP
浅谈PHP调用Webservice思路及源码分享
Jun 04 PHP
PHP生成不重复标识符的方法
Nov 21 PHP
DWZ+ThinkPHP开发时遇到的问题分析
Dec 12 PHP
php实现的读取CSV文件函数示例
Feb 07 PHP
PHP实现图的邻接矩阵表示及几种简单遍历算法分析
Nov 24 PHP
php二维数组按某个键值排序的实例讲解
Feb 15 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 PHP
aec加密 php_php aes加密解密类(兼容php5、php7)
Mar 14 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下统计用户在线时间的一种尝试
2010/08/26 PHP
解析php中获取url与物理路径的总结
2013/06/21 PHP
php实现aes加密类分享
2014/02/16 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
php两点地理坐标距离的计算方法
2018/12/29 PHP
JavaScript面象对象设计
2008/04/28 Javascript
JS 获取浏览器和屏幕宽高等信息的实现思路及代码
2013/07/31 Javascript
js jq 单击和双击区分示例介绍
2013/11/05 Javascript
漂亮! js实现颜色渐变效果
2016/08/12 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
JS实现禁止用户使用Ctrl+鼠标滚轮缩放网页的方法
2017/04/28 Javascript
vue使用Axios做ajax请求详解
2017/06/07 Javascript
vue滚动轴插件better-scroll使用详解
2017/10/17 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
微信小程序npm引入vant-weapp的踩坑记录
2019/08/01 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
python executemany的使用及注意事项
2017/03/13 Python
解决python删除文件的权限错误问题
2018/04/24 Python
详解重置Django migration的常见方式
2019/02/15 Python
python爬虫实现中英翻译词典
2019/06/25 Python
python实现DEM数据的阴影生成的方法
2019/07/23 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
python调用HEG工具批量处理MODIS数据的方法及注意事项
2020/02/18 Python
Python实现将元组中的元素作为参数传入函数的操作
2020/06/05 Python
python如何求圆的面积
2020/07/01 Python
英国演唱会订票网站:Ticket Selection
2018/03/27 全球购物
YSL圣罗兰美妆英国官网:Yves Saint Laurent Beauty UK
2019/08/03 全球购物
JAVA和C++的区别
2013/10/06 面试题
建筑文秘专业个人求职信范文
2013/12/28 职场文书
求职面试个人自我评价
2014/02/28 职场文书
浪漫婚礼主持词
2014/03/14 职场文书
公司副总经理岗位职责
2014/10/01 职场文书
单位单身证明样本
2014/10/11 职场文书
员工福利申请报告
2015/05/15 职场文书
Python 可迭代对象 iterable的具体使用
2021/08/07 Python
vue中 this.$set的使用详解
2021/11/17 Vue.js