![](/img/trans.png)
[英]$_FILES['']['type'] is giving application/octet-stream as output
[英]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_file或finfo_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.