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 相关文章推荐
我的论坛源代码(七)
Oct 09 PHP
php下MYSQL limit的优化
Jan 10 PHP
将文件夹压缩成zip文件的php代码
Dec 14 PHP
PHP+JS+rsa数据加密传输实现代码
Mar 23 PHP
使用 PHPMAILER 发送邮件实例应用
Nov 07 PHP
遭遇php的in_array低性能问题
Sep 17 PHP
destoon安装出现Internal Server Error的解决方法
Jun 21 PHP
PHP多维数组遍历方法(2种实现方法)
Dec 10 PHP
php打包网站并在线压缩为zip
Feb 13 PHP
微信企业转账之入口类分装php代码
Oct 01 PHP
php实现的数组转xml案例分析
Sep 28 PHP
PHP7 list() 函数修改
Mar 09 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
虫族 Zerg 历史背景
2020/03/14 星际争霸
PHP数组循环操作详细介绍 附实例代码
2013/02/03 PHP
PHP 实现代码复用的一个方法 traits新特性
2015/02/22 PHP
fsockopen pfsockopen函数被禁用,SMTP发送邮件不正常的解决方法
2015/09/20 PHP
thinkPHP5项目中实现QQ第三方登录功能
2017/10/20 PHP
php实现映射操作实例详解
2019/10/02 PHP
各浏览器对link标签onload/onreadystatechange事件支持的差异分析
2011/04/27 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
解决node-webkit 不支持html5播放mp4视频的方法
2015/03/11 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
gulp安装以及打包合并的方法教程
2017/11/19 Javascript
javascript闭包的使用之按钮切换功能
2018/08/30 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
JS实现音乐导航特效
2020/01/06 Javascript
jQuery插件simplePagination的使用方法示例
2020/04/28 jQuery
Javascript幻灯片播放功能实现过程解析
2020/05/07 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
使用python提取html文件中的特定数据的实现代码
2013/03/24 Python
Python 搭建Web站点之Web服务器与Web框架
2016/11/06 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
2017/11/21 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
python自动发送邮件脚本
2018/06/20 Python
Sanic框架流式传输操作示例
2018/07/18 Python
使用python读取.text文件特定行的数据方法
2019/01/28 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
Python 操作mysql数据库查询之fetchone(), fetchmany(), fetchall()用法示例
2019/10/17 Python
生物化学研究助理员求职信
2013/10/09 职场文书
餐饮管理自我介绍信
2014/01/15 职场文书
大二学生学习个人自我评价
2014/01/19 职场文书
50岁生日感言
2014/01/23 职场文书
学生会主席事迹材料
2014/01/28 职场文书
首席执行官观后感
2015/06/03 职场文书
Python中的np.argmin()和np.argmax()函数用法
2021/06/02 Python
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
python周期任务调度工具Schedule使用详解
2021/11/23 Python
世界十大动漫制作公司排行榜,迪士尼上榜,第二是美国代表性文化符
2022/03/18 欧美动漫