繁体   English   中英

某些文件被设置为“应用程序/八位字节流”类型

[英]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并在服务器端做到这一点。

谢谢。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM