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 相关文章推荐
用文本文件制作留言板提示(上)
Oct 09 PHP
PHP 已经成熟
Dec 04 PHP
PHP中设置时区方法小结
Jun 03 PHP
探讨PHP删除文件夹的三种方法
Jun 09 PHP
php Session存储到Redis的方法
Nov 04 PHP
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
Sep 26 PHP
php、mysql查询当天,查询本周,查询本月的数据实例(字段是时间戳)
Feb 04 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
PHP开发中csrf攻击的简单演示和防范
May 07 PHP
php+redis实现商城秒杀功能
Nov 19 PHP
laravel-admin 后台表格筛选设置默认的查询日期方法
Oct 03 PHP
php 多继承的几种常见实现方法示例
Nov 18 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中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
PHP数据集构建JSON格式及新数组的方法
2012/11/07 PHP
PHP ? EasyUI DataGrid 资料取的方式介绍
2012/11/07 PHP
淘宝ip地址查询类分享(利用淘宝ip库)
2014/01/07 PHP
dedecms中使用php语句指南
2014/11/13 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
jQuery布局插件UI Layout简介及使用方法
2013/04/03 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
个人总结的一些JavaScript技巧、实用函数、简洁方法、编程细节
2015/06/10 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
JavaScript中removeChild 方法开发示例代码
2016/08/15 Javascript
jQuery组件easyui基本布局实现代码
2016/08/25 Javascript
js实现图片轮播效果学习笔记
2017/07/26 Javascript
js移动端事件基础及常用事件库详解
2017/08/15 Javascript
JS库之Waypoints的用法详解
2017/09/13 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
JS温故而知新之变量提升和时间死区
2019/01/27 Javascript
node 解析图片二维码的内容代码实例
2019/09/11 Javascript
在layer弹层layer.prompt中,修改placeholder的实现方法
2019/09/27 Javascript
vue-cli基础配置及webpack配置修改的完整步骤
2019/10/20 Javascript
python基于urllib实现按照百度音乐分类下载mp3的方法
2015/05/25 Python
Python计算已经过去多少个周末的方法
2015/07/25 Python
Django应用程序中如何发送电子邮件详解
2017/02/04 Python
使用Python实现windows下的抓包与解析
2018/01/15 Python
Python 利用切片从列表中取出一部分使用的方法
2019/02/01 Python
Python生成器的使用方法和示例代码
2019/03/04 Python
python 获取当前目录下的文件目录和文件名实例代码详解
2020/03/10 Python
Python如何实现感知器的逻辑电路
2020/12/25 Python
如何用Python徒手写线性回归
2021/01/25 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
斯凯奇澳大利亚官网:SKECHERS澳大利亚
2018/03/31 全球购物
酒店管理毕业生自我鉴定
2014/03/02 职场文书
团组织推优材料
2014/12/29 职场文书
2015小学教育教学工作总结
2015/07/21 职场文书
react 路由Link配置详解
2021/11/11 Javascript
Python制作表白爱心合集
2022/01/22 Python