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实现将GB编码转换为UTF8
Nov 25 PHP
常用的php ADODB使用方法集锦
Mar 25 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
PHP 命令行工具 shell_exec, exec, passthru, system详细使用介绍
Sep 11 PHP
PHP5中实现多态的两种方法实例分享
Apr 21 PHP
PHP+Mysql树型结构(无限分类)数据库设计的2种方式实例
Jul 15 PHP
PHP中使用json数据格式定义字面量对象的方法
Aug 20 PHP
php身份证号码检查类实例
Jun 18 PHP
PHP自定义函数获取URL中一级域名的方法
Aug 23 PHP
php中钩子(hook)的原理与简单应用demo示例
Sep 03 PHP
使用PHP开发留言板功能
Nov 19 PHP
通过PHP的Wrapper无缝迁移原有项目到新服务的实现方法
Apr 02 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
vBulletin Forum 2.3.xx SQL Injection
2006/10/09 PHP
php加密解密实用类分享
2014/01/07 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
PHP实现的多维数组去重操作示例
2018/07/21 PHP
PHP bin2hex()函数基础实例讲解
2019/02/11 PHP
firefox和IE系列的相关区别整理 以备后用
2009/12/28 Javascript
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
javascript正则表达式中参数g(全局)的作用
2010/11/11 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
JavaScript高级程序设计 阅读笔记(二十) js错误处理
2012/08/14 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
JS合并数组的几种方法及优劣比较
2014/09/19 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
Node.js的Web模板引擎ejs的入门使用教程
2016/06/06 Javascript
Radio 单选JS动态添加的选项onchange事件无效的解决方法
2016/12/12 Javascript
Vue.js 2.0窥探之Virtual DOM到底是什么?
2017/02/10 Javascript
Angular服务Request异步请求的实例讲解
2018/08/13 Javascript
详解JS判断页面是在手机端还是在PC端打开的方法
2019/04/26 Javascript
JavaScript箭头函数中的this详解
2019/06/19 Javascript
微信小程序之数据绑定原理解析
2019/08/14 Javascript
微信接入之获取用户头像的方法步骤
2019/09/23 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
Python中的迭代器漫谈
2015/02/03 Python
Python 词典(Dict) 加载与保存示例
2019/12/06 Python
建筑施工实习自我鉴定
2013/09/19 职场文书
安全生产检查通报
2014/01/29 职场文书
经典婚礼主持词
2014/03/13 职场文书
2014基层党员干部学习全国两会心得体会
2014/03/17 职场文书
年终总结会议主持词
2014/03/17 职场文书
我与祖国共奋进演讲稿
2014/09/13 职场文书
乡镇三严三实学习心得体会
2014/10/13 职场文书
考试作弊检讨书
2014/10/21 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
大学生自我推荐信范文
2015/03/24 职场文书
Django+Nginx+uWSGI 定时任务的实现方法
2022/01/22 Python
Tomcat用户管理的优化配置详解
2022/03/31 Servers