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 相关文章推荐
第十五节--Zend引擎的发展
Nov 16 PHP
excellent!――ASCII Art(由目标图象生成ascii)
Feb 20 PHP
php 上传功能实例代码
Apr 13 PHP
php5.5中类级别的常量使用介绍
Oct 02 PHP
php生成图形(Libchart)实例
Nov 06 PHP
关于JSON以及JSON在PHP中的应用技巧
Nov 27 PHP
php实现邮件发送并带有附件
Jan 24 PHP
PHP获取栏目的所有子级和孙级栏目的ID号示例
Apr 01 PHP
PHP获取youku视频真实flv文件地址的方法
Dec 23 PHP
一个简单至极的PHP缓存类代码
Oct 23 PHP
PHP7数组的底层实现示例
Aug 25 PHP
php探针使用原理和技巧讲解
Sep 17 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的开发框架的现状和展望
2007/03/16 PHP
浅析ThinkPHP中的pathinfo模式和URL重写
2014/01/06 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
2014/11/03 PHP
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
javascript静态页面传值的三种方法分享
2013/11/12 Javascript
jQuery 顶部导航跟随滚动条滚动固定浮动在顶部
2014/06/06 Javascript
jquery实现类似淘宝星星评分功能有截图
2014/09/15 Javascript
使用Javascript写的2048小游戏
2015/11/25 Javascript
jquery+css3实现会动的小圆圈效果
2016/01/27 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
vue拦截器Vue.http.interceptors.push使用详解
2017/04/22 Javascript
使用JavaScript实现alert的实例代码
2017/07/06 Javascript
js实现动态增加文件域表单功能
2018/10/22 Javascript
小程序实现留言板
2018/11/02 Javascript
javascript中一些奇葩的日期换算方法总结
2018/11/14 Javascript
微信小程序传值以及获取值方法的详解
2019/04/29 Javascript
javascript自定义右键菜单插件
2019/12/16 Javascript
[05:24]TI9采访——教练
2019/08/24 DOTA
python数据结构之图的实现方法
2015/07/08 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
批量获取及验证HTTP代理的Python脚本
2017/04/23 Python
Python 寻找局部最高点的实现
2019/12/05 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
python中sys模块是做什么用的
2020/08/16 Python
Python 如何查找特定类型文件
2020/08/17 Python
使用CSS3的appearance属性改变元素的外观的方法
2015/12/12 HTML / CSS
回门宴答谢词
2014/01/13 职场文书
学校十一活动方案
2014/02/01 职场文书
2015年党风廉政建设目标责任书
2015/05/08 职场文书
刑事案件上诉状
2015/05/23 职场文书
小学生暑假生活总结
2015/07/13 职场文书
治理商业贿赂工作总结
2015/08/10 职场文书
Python+Appium自动化测试的实战
2021/06/30 Python
MySQL安装失败的原因及解决步骤
2022/06/14 MySQL