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 相关文章推荐
?生?D片??C字串
Dec 06 PHP
php设计模式 Visitor 访问者模式
Jun 28 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
解析CI即CodeIgniter框架在Nginx下的重写规则
Jun 03 PHP
DOM XPATH获取img src值的query
Sep 23 PHP
FastCGI 进程意外退出造成500错误
Jul 26 PHP
浅谈PHP的exec()函数无返回值排查方法(必看)
Mar 31 PHP
php爬取天猫和淘宝商品数据
Feb 23 PHP
PHP Post获取不到非表单数据的问题解决办法
Feb 27 PHP
ThinkPHP5.0框架验证码功能实现方法【基于第三方扩展包】
Mar 11 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
Oct 08 PHP
laravel 实现根据字段不同值做不同查询
Oct 23 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
php下实现在指定目录搜索指定类型文件的函数
2008/10/03 PHP
php 遍历目录,生成目录下每个文件的md5值并写入到结果文件中
2016/12/12 PHP
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
extjs关于treePanel+chekBox全部选中以及清空选中问题探讨
2013/04/02 Javascript
玩转方法:call和apply
2014/05/08 Javascript
5种处理js跨域问题方法汇总
2014/12/04 Javascript
Express实现前端后端通信上传图片之存储数据库(mysql)傻瓜式教程(二)
2015/12/10 Javascript
jquery实现文本框textarea自适应高度
2016/03/09 Javascript
js基础之DOM中元素对象的属性方法详解
2016/10/28 Javascript
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
详解node登录接口之密码错误限制次数(含代码)
2019/10/25 Javascript
[01:35]2014DOTA2西雅图邀请赛 专访狐狸妈青春献给刀塔
2014/07/08 DOTA
[05:24]TI9采访——教练
2019/08/24 DOTA
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
python连接字符串的方法小结
2015/07/13 Python
python 根据pid杀死相应进程的方法
2017/01/16 Python
python操作mysql数据库
2017/03/05 Python
Python实现多并发访问网站功能示例
2017/06/19 Python
深入理解python中函数传递参数是值传递还是引用传递
2017/11/07 Python
Python编程实现线性回归和批量梯度下降法代码实例
2018/01/04 Python
python实现百度语音识别api
2018/04/10 Python
python验证身份证信息实例代码
2019/05/06 Python
解决Python spyder显示不全df列和行的问题
2020/04/20 Python
Python使用struct处理二进制(pack和unpack用法)
2020/11/12 Python
python RSA加密的示例
2020/12/09 Python
基于Python的接口自动化unittest测试框架和ddt数据驱动详解
2021/01/27 Python
Python就将所有的英文单词首字母变成大写
2021/02/12 Python
CSS3 Flexbox中flex-shrink属性的用法示例介绍
2013/12/30 HTML / CSS
旅游管理专业个人求职信范文
2013/12/24 职场文书
2015年国庆节寄语
2015/08/17 职场文书
导游词之新疆-喀纳斯
2019/10/10 职场文书
JS如何实现基于websocket的多端桥接平台
2021/05/14 Javascript
MySQL时间盲注的五种延时方法实现
2021/05/18 MySQL
JVM的类加载器和双亲委派模式你了解吗
2022/03/13 Java/Android
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang