某些文件设置为“application / octet-stream”类型

时间:2015-05-19 17:51:46

标签: php mime-types

我有一个奇怪的问题,当我尝试上传不同的文件时,其中一些文件被正确识别,但有些文件未被识别,并且在您检查其类型application/octet-stream时将其设置为$_FILES['file_1']['type']

Debug Objects: png
Debug Objects: image/png
Debug Objects: php
Debug Objects: application/octet-stream
Debug Objects: rar
Debug Objects: application/octet-stream
Debug Objects: psd
Debug Objects: application/octet-stream

我联系了我的托管公司,他们告诉我这不是他们的错误,而且可能与CloudFlare有关,但我之前从未遇到过这样的问题。

我知道RAR有application/octet-stream作为可能的mime类型之一,但不是PHP或PSD。

这些是PSD的类型:

application/x-photoshop
image/vnd.adobe.photoshop

这些是针对PHP的:

application/x-httpd-php
application/php
application/x-php
text/php
text/x-php
application/x-httpd-php-source

有人知道为什么会这样做吗?我在IE,FireFox,Chrome和Opera中尝试过它。发生在所有这些浏览器中。

有更好的方法来检查类型吗?因为我正在检查的是由浏览器发送的,这可能是欺骗性的(我也在检查扩展以获得更高的安全性)。我知道有办法用java做,但我想用PHP做服务器端。

感谢。

3 个答案:

答案 0 :(得分:2)

您必须使用finfo_filefinfo_buffer检查服务器端的mime类型。

<?php
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo finfo_file($finfo, $filename);

答案 1 :(得分:0)

[&#39; type&#39;]不可信任。一个好的解决方案是http://php.net/manual/en/book.fileinfo.php

答案 2 :(得分:0)

改进@take答案,我也使用file_get_contents()

 $finfo = new finfo(FILEINFO_MIME);
 print_r($finfo->buffer(file_get_contents($filename)));