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 相关文章推荐
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
Jul 09 PHP
php5编程中的异常处理详细方法介绍
Jul 29 PHP
新安装的MySQL数据库需要注意的安全知识
Jul 30 PHP
破解图片防盗链的代码(asp/php)测试通过
Jul 02 PHP
php程序效率优化的一些策略小结
Jul 17 PHP
shopex主机报错误请求解决方案(No such file or directory)
Dec 27 PHP
php微信公众平台开发之获取用户基本信息
Aug 17 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
PHP查询大量数据内存耗尽问题的解决方法
Oct 28 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
php实现的pdo公共类定义与用法示例
Jul 19 PHP
Laravel框架实现简单的学生信息管理平台案例
May 07 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创建桌面快捷方式的实例代码
2014/02/17 PHP
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
js中匿名函数的创建与调用方法分析
2014/12/19 Javascript
基于jQuery Circlr插件实现产品图片360度旋转
2015/09/20 Javascript
你不需要jQuery(三) 新AJAX方法fetch()
2016/06/14 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
AngularJS extend用法详解及实例代码
2016/11/15 Javascript
TableSort.js表格排序插件使用方法详解
2017/02/10 Javascript
ES6新特性一: let和const命令详解
2017/04/20 Javascript
详解vue嵌套路由-params传递参数
2017/05/23 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
ionic使用angularjs表单验证(模板验证)
2018/12/12 Javascript
jquery实现简单自动轮播图效果
2020/07/29 jQuery
如何在vue中使用kindeditor富文本编辑器
2020/12/19 Vue.js
利用Python破解验证码实例详解
2016/12/08 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
TensorFlow如何实现反向传播
2018/02/06 Python
DataFrame中的object转换成float的方法
2018/04/10 Python
Windows下将Python文件打包成.EXE可执行文件的方法
2018/08/03 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
python3 深浅copy对比详解
2019/08/12 Python
python3 pillow模块实现简单验证码
2019/10/31 Python
Python 读取位于包中的数据文件
2020/08/07 Python
python 解决函数返回return的问题
2020/12/05 Python
scrapy实践之翻页爬取的实现
2021/01/05 Python
北京鼎普科技股份有限公司软件测试面试题
2012/04/07 面试题
Python中如何定义一个函数
2016/09/06 面试题
集体婚礼证婚词
2014/01/13 职场文书
群众路线党课主持词
2014/04/01 职场文书
我们的节日中秋活动方案
2014/08/19 职场文书
安全责任书
2015/01/29 职场文书
如何使用Python对NetCDF数据做空间相关分析
2021/04/21 Python
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
vscode远程免密登入Linux服务器的配置方法
2022/06/28 Servers