我写了一个上传文件的页面,同一份文件,同样 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:
<code class="html"><form method="POST" enctype="multipart/form-data">
...
</form></code>然后我在 PHP 官方手册里看到:
$_FILES['userfile']['type']文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
既然是由浏览器提供此信息,那么为什么相同的浏览器在不同的系统下会有不同的表现?
P.S.我现在已经打算使用第三方库去识别文件的 MIME Types 了,但是我还是想了解为什么会出现这个情况。
立即学习“PHP免费学习笔记(深入)”;
我写了一个上传文件的页面,同一份文件,同样 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:
<code class="html"><form method="POST" enctype="multipart/form-data">
...
</form></code>然后我在 PHP 官方手册里看到:
$_FILES['userfile']['type']文件的 MIME 类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此 MIME 类型在 PHP 端并不检查,因此不要想当然认为有这个值。
既然是由浏览器提供此信息,那么为什么相同的浏览器在不同的系统下会有不同的表现?
P.S.我现在已经打算使用第三方库去识别文件的 MIME Types 了,但是我还是想了解为什么会出现这个情况。
立即学习“PHP免费学习笔记(深入)”;
这个参数完全依赖浏览器的识别,在有的操作系统或者文件系统里,有便捷的操作或者信息去获取到MIME类型,而在有的系统里也许并不那么容易,而浏览器有时候为了保证速度,也减少维护MIME识别的成本,就干脆不分析具体的类型。也正是由于这个参数依赖客户端的识别,所以这个参数并不总是可靠的,要得到可靠是MIME,还是需要自己去识别。
以上的回答是正确的,解决办法是读取文件头进行分析,你可以百度找一下文件头分析文件类型,具体的我就不百度粘贴了。
因为不同的浏览器在处理的时候并不会完全输出一样的内容
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号