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 相关文章推荐
PHP 柱状图实现代码
Dec 04 PHP
探讨:如何通过stats命令分析Memcached的内部状态
Jun 14 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
Jun 17 PHP
下拉列表多级联动dropDownList示例代码
Jun 27 PHP
php实现文件编码批量转换
Mar 10 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 PHP
无需数据库在线投票调查php代码
Jul 20 PHP
PHP 7.1新特性的汇总介绍
Dec 16 PHP
PHP CURL与java http使用方法详解
Jan 26 PHP
Laravel框架自定义验证过程实例分析
Feb 01 PHP
PHP常用的类封装小结【4个工具类】
Jun 28 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 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
Ajax+PHP边学边练 之五 图片处理
2009/12/03 PHP
支持中文字母数字、自定义字体php验证码代码
2012/02/27 PHP
php 操作符与控制结构
2012/03/07 PHP
javaScript arguments 对象使用介绍
2013/10/18 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
Linux下使用jq友好的打印JSON技巧分享
2014/11/18 Javascript
详解JavaScript中的事件流和事件处理程序
2016/05/20 Javascript
Ubuntu 16.04 64位中搭建Node.js开发环境教程
2016/10/19 Javascript
详解webpack+gulp实现自动构建部署
2017/06/29 Javascript
详解如何将 Vue-cli 改造成支持多页面的 history 模式
2017/11/20 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
leaflet加载geojson叠加显示功能代码
2020/02/21 Javascript
easy_install python包安装管理工具介绍
2013/02/10 Python
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
python访问抓取网页常用命令总结
2017/04/11 Python
python实现俄罗斯方块游戏
2020/03/25 Python
在Python中获取操作系统的进程信息
2019/08/27 Python
解决Python对齐文本字符串问题
2019/08/28 Python
浅谈spring boot 集成 log4j 解决与logback冲突的问题
2020/02/20 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
html5 canvas里绘制椭圆并保持线条粗细均匀的技巧
2013/03/25 HTML / CSS
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
澳大利亚电商Catch新西兰站:Catch.co.nz
2020/05/30 全球购物
Java里面如何把一个Array数组转换成Collection, List
2013/07/26 面试题
标记环介质访问控制协议
2016/03/27 面试题
结婚典礼证婚词
2014/01/11 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
店铺转让协议书(2014版)
2014/09/23 职场文书
五四青年节比赛演讲稿
2015/03/18 职场文书
基层医务人员三严三实心得体会
2016/01/05 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
简单谈谈Python面向对象的相关知识
2021/06/28 Python
MySQL优化之慢日志查询
2022/06/10 MySQL