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 增加了对 .ZIP 文件的读取功能
Oct 09 PHP
PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)
Aug 31 PHP
php+memcache实现的网站在线人数统计代码
Jul 04 PHP
ThinkPHP采用实现三级循环代码实例
Jul 18 PHP
使用symfony命令创建项目的方法
Mar 17 PHP
php图像处理函数imagecopyresampled用法详解
Dec 02 PHP
Windows 下安装 swoole 图文教程(php)
Jun 05 PHP
详解PHP swoole process的使用方法
Aug 26 PHP
浅析PHP类的反射来实现依赖注入过程
Feb 06 PHP
php-app开发接口加密详解
Apr 18 PHP
PHP addAttribute()函数讲解
Feb 03 PHP
PHP通过GD库实现验证码功能示例
Feb 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
用Flash图形化数据(二)
2006/10/09 PHP
php批量添加数据与批量更新数据的实现方法
2014/12/16 PHP
php实现的一个简单json rpc框架实例
2015/03/30 PHP
PHP输出一个等腰三角形的方法
2015/05/12 PHP
Laravel 自定命令以及生成文件的例子
2019/10/23 PHP
XENON基于JSON变种
2010/07/27 Javascript
jQuery中需要注意的细节问题小结
2011/12/06 Javascript
基于jquery自定义的漂亮单选按钮RadioButton
2013/11/19 Javascript
jQuery支持动态参数将函数绑定到事件上的方法
2015/03/17 Javascript
举例讲解AngularJS中的模块
2015/06/17 Javascript
Jquery左右滑动插件之实现超级炫酷动画效果附源码下载
2015/12/02 Javascript
Jquery元素追加和删除的实现方法
2016/05/24 Javascript
JS框架之vue.js(深入三:组件1)
2016/09/29 Javascript
Bootstrap基本样式学习笔记之图片(6)
2016/12/07 Javascript
详解js静态资源文件请求的处理
2017/08/01 Javascript
微信小程序 POST请求的实例详解
2017/09/29 Javascript
JS继承与闭包及JS实现继承的三种方式
2017/10/15 Javascript
JS简单添加元素新节点的方法示例
2018/02/10 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
javascript设计模式 ? 原型模式原理与应用实例分析
2020/04/10 Javascript
React中使用Vditor自定义图片详解
2020/12/25 Javascript
Python中条件判断语句的简单使用方法
2015/08/21 Python
Django中间件工作流程及写法实例代码
2018/02/06 Python
python学生管理系统代码实现
2020/04/05 Python
python实现自动解数独小程序
2019/01/21 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
用python写测试数据文件过程解析
2019/09/25 Python
维珍澳洲航空官网:Virgin Australia
2017/09/08 全球购物
世界顶级足球门票网站:Live Football Tickets
2017/10/14 全球购物
服装厂厂长岗位职责
2013/12/27 职场文书
主管会计岗位职责
2014/03/13 职场文书
学习十八大标语
2014/10/09 职场文书
2015年业务工作总结范文
2015/04/10 职场文书
肖申克救赎观后感
2015/06/02 职场文书
疾病证明书
2015/06/19 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书