部分文件设置为 "application/octet-stream" 类型

Some files are set as "application/octet-stream" type

我有一个奇怪的问题,当我尝试上传不同的文件时,其中一些被正确识别,但有些却没有,当您检查它们的类型时被设置为 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 在服务器端做。

谢谢。

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

您必须使用 finfo_file or finfo_buffer 检查服务器端的 MIME 类型。

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

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

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