热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mimetype-Windows7上传文件后PHP无法精准识别MIMETypes

我写了一个上传文件的页面,同一份文件,同样Chrome(47.0.2526.106m),在Windows8.1下上传上去的文件$_FILES['myFile']['type']是很精准的,例如一份Word文档,其值为applicationvnd.openxmlformats...
我写了一个上传文件的页面,同一份文件,同样 Chrome(47.0.2526.106 m),在 Windows 8.1 下上传上去的文件 $_FILES['myFile']['type'] 是很精准的,例如一份 Word 文档,其值为 application/vnd.openxmlformats-officedocument.wordprocessingml.document
而在 Windows 7 上传,得到的值却是 application/octet-stream。除了这个文件,其他类型的文件通过 Windows 8.1 上传都是能够精准识别的,而通过 Windows 7 上传却都是 application/octet-stream,换浏览器也不行。

表单也设置了 enctype:


    ...

然后我在 PHP 官方手册里看到:

$_FILES['userfile']['type']
文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。

既然是由浏览器提供此信息,那么为什么相同的浏览器在不同的系统下会有不同的表现?

P.S.我现在已经打算使用第三方库去识别文件的 MIME Types 了,但是我还是想了解为什么会出现这个情况。

回复内容:

我写了一个上传文件的页面,同一份文件,同样 Chrome(47.0.2526.106 m),在 Windows 8.1 下上传上去的文件 $_FILES['myFile']['type'] 是很精准的,例如一份 Word 文档,其值为 application/vnd.openxmlformats-officedocument.wordprocessingml.document
而在 Windows 7 上传,得到的值却是 application/octet-stream。除了这个文件,其他类型的文件通过 Windows 8.1 上传都是能够精准识别的,而通过 Windows 7 上传却都是 application/octet-stream,换浏览器也不行。

表单也设置了 enctype:


    ...

然后我在 PHP 官方手册里看到:

$_FILES['userfile']['type']
文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。

既然是由浏览器提供此信息,那么为什么相同的浏览器在不同的系统下会有不同的表现?

P.S.我现在已经打算使用第三方库去识别文件的 MIME Types 了,但是我还是想了解为什么会出现这个情况。

这个参数完全依赖浏览器的识别,在有的操作系统或者文件系统里,有便捷的操作或者信息去获取到MIME类型,而在有的系统里也许并不那么容易,而浏览器有时候为了保证速度,也减少维护MIME识别的成本,就干脆不分析具体的类型。也正是由于这个参数依赖客户端的识别,所以这个参数并不总是可靠的,要得到可靠是MIME,还是需要自己去识别。

以上的回答是正确的,解决办法是读取文件头进行分析,你可以百度找一下文件头分析文件类型,具体的我就不百度粘贴了。

因为不同的浏览器在处理的时候并不会完全输出一样的内容

推荐阅读
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • 本文介绍了在SpringBoot中集成thymeleaf前端模版的配置步骤,包括在application.properties配置文件中添加thymeleaf的配置信息,引入thymeleaf的jar包,以及创建PageController并添加index方法。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
  • 本文介绍了Windows操作系统的版本及其特点,包括Windows 7系统的6个版本:Starter、Home Basic、Home Premium、Professional、Enterprise、Ultimate。Windows操作系统是微软公司研发的一套操作系统,具有人机操作性优异、支持的应用软件较多、对硬件支持良好等优点。Windows 7 Starter是功能最少的版本,缺乏Aero特效功能,没有64位支持,最初设计不能同时运行三个以上应用程序。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • ECMA262规定typeof操作符的返回值和instanceof的使用方法
    本文介绍了ECMA262规定的typeof操作符对不同类型的变量的返回值,以及instanceof操作符的使用方法。同时还提到了在不同浏览器中对正则表达式应用typeof操作符的返回值的差异。 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • HDU 2372 El Dorado(DP)的最长上升子序列长度求解方法
    本文介绍了解决HDU 2372 El Dorado问题的一种动态规划方法,通过循环k的方式求解最长上升子序列的长度。具体实现过程包括初始化dp数组、读取数列、计算最长上升子序列长度等步骤。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 众筹商城与传统商城的区别及php众筹网站的程序源码
    本文介绍了众筹商城与传统商城的区别,包括所售产品和玩法不同以及运营方式不同。同时还提到了php众筹网站的程序源码和方维众筹的安装和环境问题。 ... [详细]
  • 本文介绍了如何使用JSONObiect和Gson相关方法实现json数据与kotlin对象的相互转换。首先解释了JSON的概念和数据格式,然后详细介绍了相关API,包括JSONObject和Gson的使用方法。接着讲解了如何将json格式的字符串转换为kotlin对象或List,以及如何将kotlin对象转换为json字符串。最后提到了使用Map封装json对象的特殊情况。文章还对JSON和XML进行了比较,指出了JSON的优势和缺点。 ... [详细]
author-avatar
罗然8_907
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有