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开发环境配置(MySQL数据库安装图文教程)
Apr 28 PHP
解析PHP中的正则表达式以及模式匹配
Jun 19 PHP
PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
php中chdir()函数用法实例
Nov 13 PHP
PHP代码判断设备是手机还是平板电脑(两种方法)
Oct 19 PHP
详解PHP对象的串行化与反串行化
Jan 24 PHP
yii2带搜索功能的下拉框实例详解
May 12 PHP
nginx下安装php7+php5
Jul 31 PHP
微信公众号开发之文本消息自动回复php代码
Aug 08 PHP
Yii2实现同时搜索多个字段的方法
Aug 10 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
php字符串函数 str类常见用法示例
May 15 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小型企业库存管理系统的设计与实现代码
2011/05/16 PHP
PHP处理Json字符串解码返回NULL的解决方法
2014/09/01 PHP
PHP合并静态文件详解
2014/11/14 PHP
php计算两个日期相差天数的方法
2015/03/14 PHP
PHP模拟post提交数据方法汇总
2016/02/16 PHP
php 防止表单重复提交两种实现方法
2016/11/03 PHP
php文件上传 你真的掌握了吗
2016/11/28 PHP
利用ajax和PHP实现简单的流程管理
2017/03/23 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
JavaScript高级程序设计
2006/12/29 Javascript
Array.prototype 的泛型应用分析
2010/04/30 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
使用Meteor配合Node.js编写实时聊天应用的范例
2015/06/23 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
angular使用post、get向后台传参的问题实例
2017/05/27 Javascript
Vue在页面数据渲染完成之后的调用方法
2018/09/11 Javascript
bootstrap table表格插件之服务器端分页实例代码
2018/09/12 Javascript
Javascript实现秒表倒计时功能
2018/11/17 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
2019/04/25 Javascript
茶余饭后聊聊Vue3.0响应式数据那些事儿
2019/10/30 Javascript
JavaScript变量基本使用方法实例分析
2019/11/15 Javascript
详解Python中的循环语句的用法
2015/04/09 Python
Python实现删除时保留特定文件夹和文件的示例
2018/04/27 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
pytorch中tensor张量数据类型的转化方式
2019/12/31 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
matplotlib实现数据实时刷新的示例代码
2021/01/05 Python
HTML5 Canvas中绘制矩形实例
2015/01/01 HTML / CSS
时尚孕妇装:HATCH Collection
2019/09/24 全球购物
2014年关于两会精神的心得体会
2014/03/17 职场文书
本溪关门山导游词
2015/02/09 职场文书
如何书写公司员工保密协议?
2019/06/27 职场文书
导游词之峨眉山
2019/12/16 职场文书
CSS使用伪类控制边框长度的方法
2022/01/18 HTML / CSS