PHP使用finfo_file()函数检测上传图片类型的实现方法


Posted in PHP onApril 18, 2017

本文实例讲述了PHP使用finfo_file()函数检测上传图片类型的实现方法。分享给大家供大家参考,具体如下:

在输入输出中,文件的交互必不可少,比如文件的上传什么的。这里我们来解决一个小问题,就是如何判断用户上传文件的文件类型。

举一个应用场面:在我们的Web应用中,比如用户上传头像,要求是png,jpg,gif格式,接收到图片后会根据图片格式类型做不同的头像切割处理,但个别用户会传一些只更改过文件后缀的非标准图片,比如nowamagic.jpg 强行修改成 nowamagic.png,这样程序无法对该类型图片进行切割,切割失败。这个时候就需要对文件进行检测,并且仅仅根据后缀来判断是不行的。

这种这么常见的需求,PHP肯定自带了某些函数来实现的,这个函数就是 finfo_file

finfo_file

(PHP >= 5.3.0, PECL fileinfo >= 0.1.0)

finfo_file -- finfo::file — Return information about a file,This function is used to get information about a file.

函数很简单,看看官方文档就大概清楚了,这里就举一个使用例子吧,就是上传一张图片,并判断它的类型:

<html>
  <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  <head>
    <title>文件上传</title>
  </head>
  <body>
  <form accept="" method="post" enctype="multipart/form-data">
  <input type="file" name="img[]" /><br />
  <input type="submit" name="s" /><br />
  </form>
<?php
  //上传文件信息
  $img = $_FILES['img'];
  if ($img)
  {
    //文件存放目录,和本php文件同级
    $dir = dirname(__file__);
    $filename = $img['name'][0];
    $tempname = $img['tmp_name'][0];
    $savepath = "$dir\\$filename";
    $state = move_uploaded_file($tempname, $savepath);
    //如果上传成功,预览
    if($state)
    {
      echo "<img src='$filename' alt='$filename' /> ";
    }
    $finfo = finfo_open(FILEINFO_MIME_TYPE); 
    //$mime = finfo_file($finfo, dirname(__FILE__)."/".$filename); 
    $mime = finfo_file($finfo, $savepath); 
    echo $mime;
  }
?>
  </body>
</html>

需要注意的是,finfo_file 函数需要 PHP 版本 >= 5.3.0,如果低于 5.3,那么需要到 php.ini 里,将 extension=php_fileinfo.dll 前面的分号去掉来启用

当然,检测文件类型的方式很多种,后面我们会慢慢讲到。

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
mysql建立外键
Nov 25 PHP
php结合表单实现一些简单功能的例子
Jun 04 PHP
Eclipse的PHP插件PHPEclipse安装和使用
Jul 20 PHP
smarty中post用法实例
Nov 28 PHP
smarty的section嵌套循环用法示例
May 28 PHP
Yii视图操作之自定义分页实现方法
Jul 14 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
Oct 14 PHP
PHP面向对象程序设计高级特性详解(接口,继承,抽象类,析构,克隆等)
Dec 02 PHP
详解PHP中的序列化、反序列化操作
Mar 21 PHP
PHP实现链式操作的三种方法详解
Nov 16 PHP
PHP实现找出链表中环的入口节点
Jan 16 PHP
PHP实现的一致性Hash算法详解【分布式算法】
Mar 31 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
Apr 18 #PHP
基于thinkPHP3.2实现微信接入及查询token值的方法
Apr 18 #PHP
PHP递归删除多维数组中的某个值
Apr 17 #PHP
Thinkphp5.0自动生成模块及目录的方法详解
Apr 17 #PHP
php正则表达式基本知识与应用详解【经典教程】
Apr 17 #PHP
PHP中快速生成随机密码的几种方式
Apr 17 #PHP
IIS 7.5 asp Session超时时间设置方法
Apr 17 #PHP
You might like
多文件上传的例子
2006/10/09 PHP
php中计算时间差的几种方法
2009/12/31 PHP
laravel-admin自动生成模块,及相关基础配置方法
2019/10/08 PHP
PHP实现通过二维数组键值获取一维键名操作示例
2019/10/11 PHP
javascript的函数、创建对象、封装、属性和方法、继承
2011/03/10 Javascript
jquery实现奇偶行赋值不同css值
2012/02/17 Javascript
jquery对table中各数据的增加、保存、删除操作示例
2014/05/14 Javascript
Javascript中prototype属性实现给内置对象添加新的方法
2015/05/14 Javascript
jQuery Validate表单验证深入学习
2015/12/18 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
js实现密码强度检验
2017/01/15 Javascript
JQuery判断正整数整理小结
2017/08/21 jQuery
Angular项目从新建、打包到nginx部署全过程记录
2017/12/09 Javascript
React数据传递之组件内部通信的方法
2017/12/31 Javascript
AngularJS select加载数据选中默认值的方法
2018/02/28 Javascript
vue2中使用sass并配置全局的sass样式变量的方法
2018/09/04 Javascript
JS实现横向轮播图(中级版)
2020/01/18 Javascript
浅谈对yield的初步理解
2017/05/29 Python
Python删除n行后的其他行方法
2019/01/28 Python
用pycharm开发django项目示例代码
2019/06/13 Python
python3实现单目标粒子群算法
2019/11/14 Python
DRF使用simple JWT身份验证的实现
2021/01/14 Python
纽约手袋品牌:KARA
2018/03/18 全球购物
Muziker英国:中欧最大的音乐家商店
2020/02/05 全球购物
西安当代医院管理研究院笔试题
2015/12/11 面试题
开学典礼决心书
2014/03/11 职场文书
个人廉洁自律承诺书
2014/03/27 职场文书
父母对孩子说的话
2014/04/12 职场文书
中班幼儿评语大全
2014/04/30 职场文书
村党的群众路线教育实践活动工作总结
2014/10/25 职场文书
民事诉讼答辩状范文
2015/05/21 职场文书
停车场管理制度范本
2015/08/05 职场文书
史上最全书信经典范文大全(建议收藏)
2019/07/10 职场文书
小学三年级作文之写景
2019/11/05 职场文书
《游戏王:大师决斗》新活动上线 若无符合卡组可免费租用
2022/04/13 其他游戏
Win11 KB5015814遇安装失败 影响开始菜单性能解决方法
2022/07/15 数码科技