关于finfo_file函数获取文件mime值验证出错的问题
来源:互联网 发布:java开发实战1200例 编辑:程序博客网 时间:2024/05/22 12:57
今天在做图片上传 验证图片mime值时 突然发现 个别特殊情况下finfo_file 获取的MIME值不能直接使用,
按照官方的写法是
$finfo=finfo_open(FILEINFO_MIME);
$mime=finfo_file($finfo,$file_path);
finfo_close($finfo);
alert($mime);
这样子获得文件mime类型的
但是今天发现这样子不行,在文件传输中如果有charset设置传输类型为二进制流的话,就会出现类似如下图那样:
可以明显的看到,这里后面多了 分号 和后面的东西charset=binary
这里如果再进行文件mime值的验证,就算是正确合法的文件类型,也无法通过验证,因为获取到的mime值后面多了一部分二进制文件流的字符串“; charset=binary”
$file_name = $_FILES['imgFile']['name'];
$temp_arr = explode(".", $file_name);
$file_ext = array_pop($temp_arr);
$file_ext = trim($file_ext);
$file_ext = strtolower($file_ext);
$_mime=array('jpg'=>array('image/pjpeg','image/jpeg'),'gif'=>array('image/gif'),'png'=>array('image/x-png','image/png'),'jpeg'=>array('image/jpeg','image/pjpeg'));
if(empty($mime) || !in_array($mime,$_mime[$file_ext])){
alert('图片mime类型错误!');
}
故而需要做下特殊环境需求下的兼容性处理
修改后的获得mime类型的兼容性通用方法如下(注意些列红色部分,通过正则获得正确的兼容多需求环境下的mime值正确获取):
if(empty($mime) && function_exists('finfo_open')){
$finfo=finfo_open(FILEINFO_MIME);
$mime=finfo_file($finfo,$file_path);
finfo_close($finfo);
//兼容特应用殊环境下的文件上传mime精准验证
$new=preg_match('/([^;]+);?.*$/',$mime,$match);
if($new) $mime=trim($match[1]);
alert($mime);
}
这样就可以正确的获得兼容环境下的mime类型进行正确的文件mime合法性验证了,运行结果如图所示:
- 关于finfo_file函数获取文件mime值验证出错的问题
- 获取文件类型使用 finfo_file 内置函数
- 关于文件流读取出错的问题.
- Web Service获取文件的MIME type
- php 获取文件mime类型的方法
- [Android] 获取文件的MIME类型
- [Android] 获取文件的MIME类型
- php 获取文件mime类型的方法
- Java 获取文件的MIME类型
- 关于验证码图片的获取问题
- MIME类型-服务端验证上传文件的类型
- MIME类型-服务端验证上传文件的类型
- 关于open函数,一个很容易出错的问题
- 关于jquery异步上传文件出错的问题
- 关于VS中安装文件出错信息文件验证出错HRESULT=80040155的建决方法
- java获取文件MIME类型
- php获取文件mime类型的几种方法
- php获取文件mime类型的几种方法
- Java中的native修饰符
- CCActionInstant(瞬时动作子类:闪烁效果 瞬移动作 删除自身动作 翻转动作 +回调动作:以上动作都可以用回调动作实现)
- UVa - 579 - Clock Hands
- 手动修改Android数据库数据
- 安装 openSUSE 13.1 后必须做的10件事情
- 关于finfo_file函数获取文件mime值验证出错的问题
- 天真热啊!烦死了!
- CCActionInterval(CCSkewTo CCJumpBy CCBezierBy CCBlink CCTintTo CCReverseTime CCAnimate CCTargetedAc)
- 很爱很爱你
- 精通安卓性能优化-第一章(七)
- 解释性语言,编译性语言,脚本语言
- 25个增强iOS应用程序性能的提示和技巧(初级篇)
- 国内时事新闻
- 不能....