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 Zip压缩 在线对文件进行压缩的函数
May 26 PHP
php INI配置文件的解析实现分析
Jan 04 PHP
PHP的范围解析操作符(::)的含义分析说明
Jul 03 PHP
Codeigniter实现智能裁剪图片的方法
Jun 12 PHP
php实现session自定义会话处理器的方法
Jan 27 PHP
php文件上传后端处理小技巧
May 22 PHP
php变量与数组相互转换的方法(extract与compact)
Dec 02 PHP
php 截取中英文混合字符串的方法
May 31 PHP
PHP保留两位小数的几种方法
Jul 24 PHP
Yii框架函数简单用法分析
Sep 09 PHP
PHP的new static和new self的区别与使用
Nov 27 PHP
php使用gearman进行任务分发操作实例详解
Feb 26 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
模仿OSO的论坛(一)
2006/10/09 PHP
浅析Apache中RewriteCond规则参数的详细介绍
2013/06/30 PHP
PHP合并两个或多个数组的方法
2019/01/20 PHP
php面向对象程序设计中self与static的区别分析
2019/05/21 PHP
php设计模式之职责链模式实例分析【星际争霸游戏案例】
2020/03/27 PHP
Javascript的一种模块模式
2008/03/22 Javascript
封装了一个支持匿名函数的Javascript事件监听器
2014/06/05 Javascript
Iframe实现跨浏览器自适应高度解决方法
2014/09/02 Javascript
JavaScript中变量声明有var和没var的区别示例介绍
2014/09/15 Javascript
jQuery实现单击和鼠标感应事件
2015/02/01 Javascript
举例讲解JavaScript中关于对象操作的相关知识
2015/11/16 Javascript
BootStrap栅格系统、表单样式与按钮样式源码解析
2017/01/20 Javascript
Node.js设置CORS跨域请求中多域名白名单的方法
2017/03/28 Javascript
微信小程序实现给循环列表添加点击样式实例
2017/04/26 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
深入浅析Vue中mixin和extend的区别和使用场景
2019/08/01 Javascript
[40:19]2018完美盛典CS.GO表演赛
2018/12/17 DOTA
python 的列表遍历删除实现代码
2020/04/12 Python
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
深入分析python中整型不会溢出问题
2018/06/18 Python
对python条件表达式的四种实现方法小结
2019/01/30 Python
Python+Pyqt实现简单GUI电子时钟
2021/02/22 Python
docker-py 用Python调用Docker接口的方法
2019/08/30 Python
django多种支付、并发订单处理实例代码
2019/12/13 Python
Python urlopen()和urlretrieve()用法解析
2020/01/07 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
Python基于Serializer实现字段验证及序列化
2020/11/04 Python
python实现KNN近邻算法
2020/12/30 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
《花的勇气》教后反思
2014/02/12 职场文书
医院节能减排方案
2014/06/13 职场文书
小学生植树节活动总结
2014/07/04 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书