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 获取完整url地址
Dec 20 PHP
Memcached常用命令以及使用说明详解
Jun 27 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
php foreach正序倒序输出示例代码
Jul 01 PHP
自定义session存储机制避免会话保持问题
Oct 08 PHP
php中异常处理方法小结
Jan 09 PHP
浅谈php和js中json的编码和解码
Oct 24 PHP
cakephp2.X多表联合查询join及使用分页查询的方法
Feb 23 PHP
PHP实现图片批量打包下载功能
Mar 01 PHP
YII2自动登录Cookie总是失效的解决方法
Jun 28 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
Apr 05 PHP
PHPstorm启用自动换行的方法详解(IDE)
Sep 17 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
第三节 定义一个类 [3]
2006/10/09 PHP
php 生成随机验证码图片代码
2010/02/08 PHP
PHP var_dump遍历对象属性的函数与应用代码
2010/06/04 PHP
PHP的autoload机制的实现解析
2012/09/15 PHP
php记录代码执行时间(实现代码)
2013/07/05 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
2014/11/19 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
2016/03/07 PHP
CI框架中数据库操作函数$this-&gt;db-&gt;where()相关用法总结
2016/05/17 PHP
php+jquery+html实现点击不刷新加载更多的实例代码
2016/08/12 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
javascript中的变量是传值还是传址的?
2010/04/19 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
提交按钮的name='submit'引起的js失效问题及原因
2015/02/25 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
Javascript设计模式之装饰者模式详解篇
2017/01/17 Javascript
canvas仿iwatch时钟效果
2017/03/06 Javascript
JS点击图片弹出文件选择框并覆盖原图功能的实现代码
2017/08/25 Javascript
详解Node.js利用node-git-server快速搭建git服务器
2017/09/27 Javascript
对vux点击事件的优化详解
2018/08/28 Javascript
详解微信小程序(Taro)手动埋点和自动埋点的实现
2021/03/02 Javascript
[02:36]DOTA2混沌骑士 英雄基础教程
2013/11/26 DOTA
[51:15]2014 DOTA2国际邀请赛中国区预选赛 Orenda VS LGD-GAMING
2014/05/22 DOTA
python 表达式和语句及for、while循环练习实例
2017/07/07 Python
基于Python中capitalize()与title()的区别详解
2017/12/09 Python
python实现随机漫步算法
2018/08/27 Python
浅谈python的深浅拷贝以及fromkeys的用法
2019/03/08 Python
django url到views参数传递的实例
2019/07/19 Python
numpy求平均值的维度设定的例子
2019/08/24 Python
vue学习笔记之动态组件和v-once指令简单示例
2020/02/29 Python
Python+Kepler.gl实现时间轮播地图过程解析
2020/07/20 Python
维多利亚的秘密官方旗舰店:VICTORIA’S SECRET
2018/04/02 全球购物
中国一家专注拼团的社交购物网站:拼多多
2018/06/13 全球购物
旅游安全协议书
2014/04/21 职场文书
中学生操行评语大全
2014/04/24 职场文书
一文搞懂Golang 时间和日期相关函数
2021/12/06 Golang
Java Spring读取和存储详细操作
2022/08/05 Java/Android