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生成WAP页面
Oct 09 PHP
Zend Studio (eclipse)使用速度优化方法
Mar 23 PHP
用穿越火线快速入门php面向对象
Feb 22 PHP
php中最简单的字符串匹配算法
Dec 16 PHP
php打印输出棋盘的实现方法
Dec 23 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
May 31 PHP
PHP二维数组矩形转置实例
Jul 20 PHP
PHP简单实现合并2个数字键数组值的方法
May 30 PHP
php进程daemon化的正确实现方法
Sep 06 PHP
php反射学习之依赖注入示例
Jun 14 PHP
laravel 错误处理,接口错误返回json代码
Oct 25 PHP
laravel5.6 框架操作数据 Eloquent ORM用法示例
Jan 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
世界第一个无线广播电台 KDKA
2021/03/01 无线电
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
PHP使用ajax的post方式下载excel文件简单示例
2019/08/06 PHP
多个js与css文件的合并方法详细说明
2012/12/26 Javascript
jQuery的DOM操作之删除节点示例
2014/01/03 Javascript
NodeJS远程代码执行
2016/08/28 NodeJs
jQuery实现鼠标滑过图片移动特效
2016/12/08 Javascript
从零学习node.js之mysql数据库的操作(五)
2017/02/24 Javascript
bootstrap栅格系统示例代码分享
2017/05/22 Javascript
AngularJS 表单验证手机号的实例(非必填)
2017/11/12 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
vue服务端渲染缓存应用详解
2018/09/12 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
[07:54]DOTA2 MV《我的动力鞋》 ImbaTV 出品
2014/11/21 DOTA
python中定义结构体的方法
2013/03/04 Python
python基于multiprocessing的多进程创建方法
2015/06/04 Python
Python使用cookielib模块操作cookie的实例教程
2016/07/12 Python
Python操作Excel之xlsx文件
2017/03/24 Python
Python文件和流(实例讲解)
2017/09/12 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
python 解决flask 图片在线浏览或者直接下载的问题
2020/01/09 Python
Amara美国站:英国高端家居礼品网站,世界各地的奢侈家具品牌
2017/07/26 全球购物
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
90后毕业生的求职信范文
2013/09/21 职场文书
高中军训感言1000字
2014/03/01 职场文书
常务副总经理任命书
2014/06/05 职场文书
会计工作总结范文2014
2014/12/23 职场文书
交通事故协议书范本
2016/03/19 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
浅谈Redis主从复制以及主从复制原理
2021/05/29 Redis
Java org.w3c.dom.Document 类方法引用报错
2021/08/07 Java/Android
Python list列表删除元素的4种方法
2021/11/01 Python
Android 中的类文件和类加载器详情
2022/06/05 Java/Android
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL