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批量生成随机用户名
Jul 10 PHP
PHP 变量定义和变量替换的方法
Jul 30 PHP
解决PHP在DOS命令行下却无法链接MySQL的技术笔记
Dec 29 PHP
浅析PHP 按位与或 (^ 、&amp;)
Jun 21 PHP
适用于抽奖程序、随机广告的PHP概率算法实例
Apr 09 PHP
php+xml实现在线英文词典查询的方法
Jan 23 PHP
php打造智能化的柱状图程序,用于报表等
Jun 19 PHP
[原创]php集成安装包wampserver修改密码后phpmyadmin无法登陆的解决方法
Nov 23 PHP
php获取'/'传参的值简单方法
Jul 13 PHP
YII2框架中excel表格导出的方法详解
Jul 21 PHP
PHP实现的折半查询算法示例
Oct 09 PHP
Swoole源码中如何查询Websocket的连接问题详解
Aug 30 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中的array数组类型分析说明
2010/07/27 PHP
6个超实用的PHP代码片段
2015/08/10 PHP
PHP批量去除BOM头内容信息代码
2016/03/11 PHP
mac下多个php版本快速切换的方法
2016/10/09 PHP
DEDE实现转跳属性文档在模板上调用出转跳地址
2016/11/04 PHP
使用jquery制作弹出框效果
2015/04/03 Javascript
jQuery动画效果相关方法实例分析
2015/12/31 Javascript
JS数组操作(数组增加、删除、翻转、转字符串、取索引、截取(切片)slice、剪接splice、数组合并)
2016/05/20 Javascript
jQuery通过ajax请求php遍历json数组到table中的代码(推荐)
2016/06/12 Javascript
jQuery简单实现中间浮窗效果
2016/09/04 Javascript
利用Angular.js限制textarea输入的字数
2016/10/20 Javascript
解决vue项目打包后提示图片文件路径错误的问题
2018/07/04 Javascript
vue中使用props传值的方法
2019/05/08 Javascript
Vue编写可显示周和月模式的日历 Vue自定义日历内容的显示
2019/06/26 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
利用JS代码自动删除稿件的普通弹幕功能
2019/09/20 Javascript
JS前端模块化原理与实现方法详解
2020/03/17 Javascript
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
Python实现Linux命令xxd -i功能
2016/03/06 Python
Django返回json数据用法示例
2016/09/18 Python
Php多进程实现代码
2018/05/07 Python
python中退出多层循环的方法
2018/11/27 Python
Django给admin添加Action的步骤详解
2019/05/01 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
Python实现图片识别加翻译功能
2019/12/26 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
python由已知数组快速生成新数组的方法
2020/04/08 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
Python新建项目自动添加介绍和utf-8编码的方法
2020/12/26 Python
一个非常简单好用的Python图形界面库(PysimpleGUI)
2020/12/28 Python
实习鉴定范文
2013/12/19 职场文书
回门宴答谢词
2014/01/13 职场文书
运动会演讲稿300字
2014/08/25 职场文书
《雪域豹影》读后感:父爱的伟大
2019/12/23 职场文书
解决tk mapper 通用mapper的bug问题
2021/06/16 Java/Android
星际争霸 Light vs Action 一场把教主看到鬼畜的比赛
2022/04/01 星际争霸