【问题标题】:Some files are set as "application/octet-stream" type一些文件被设置为“application/octet-stream”类型
【发布时间】:2023-03-22 02:52:01
【问题描述】:

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

谢谢。

【问题讨论】:

  • 我认为它仅来自 Chorme,您是否尝试过使用 FF 检查 mime 类型。
  • @SudipPal 尝试过 IE、Chrome、FF、Opera。发生在所有人身上。
  • 目前还不清楚你在问什么。将什么从哪里上传到谁时,哪些文件被识别为什么?
  • @deceze 列出了一些(不是全部)类型设置为 application/octet-stream 而不是 propper 类型的文件。而且您显然也错过了我正在使用浏览器在 PHP 中上传表单...尝试再次阅读。
  • “其中一些被正确识别” – 何时何地被识别?是的,您正在上传文件,但是您究竟从哪里获取该 MIME 类型?

标签: php mime-types


【解决方案1】:

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

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

【讨论】:

  • 这就是我想要的。因为我真的在我的服务器上安装了任何东西,所以很难找到已经安装在那里的东西,这就是我的解决方案:)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 2020-08-01
      • 2011-11-21
      • 2012-07-28
      • 2019-01-09
      • 2018-09-11
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 2011-09-19
      相关资源
      最近更新 更多