【问题标题】:Php doesn't return the correct mime typephp 没有返回正确的 mime 类型
【发布时间】:2011-07-10 17:21:22
【问题描述】:

finfo 函数正在返回疯狂的 mime 类型。看看下面的代码,这是怎么回事?

<?php
    $files = array ("css.css", "index.html", "js.js", "png.png");

    $info = finfo_open (FILEINFO_MIME_TYPE);

    for ($i = 0; $i < count ($files); $i ++) {
        $type = finfo_file ($info, $files[$i]);

        $files[$i] = $type;
    }

    finfo_close ($info);

    echo $files[0]; // text/x-c -> WHAT ?!
    echo $files[1]; // text/html -> Ok !
    echo $files[2]; // text/x-c++ -> WHAT ?!
    echo $files[3]; // image/png -> Ok !
?>

谢谢

【问题讨论】:

    标签: php javascript css mime-types mime


    【解决方案1】:

    我对 fileinfo 的工作原理并不十分熟悉,但我认为这很正常。文本文件(这就是 CSS 和 JS)没有提供关于它有什么内容的明确指示。它们没有标头字节,没有定义的结构。所以所有可怜的fileinfo 可以做的就是猜测——结果很差,正如你所看到的。

    我认为要成功验证 .js 和 .css 文件的内容,您必须依赖扩展名,或者使用正确、适当的解析器实际解析它们。

    【讨论】:

      【解决方案2】:

      目前finfo好像有bug

      https://bugs.php.net/bug.php?id=53035

      这与实际 mime 数据库的内容有关,而不是任何错误的逻辑。

      我正在做的(这对于更严格的情况可能没有那么有用)是硬编码我知道我需要的正确 mime 类型,这样硬编码只需在下一个版本中注释掉PHP 的。啦啦:

      $info = finfo_open(FILEINFO_MIME_TYPE);     
      $mime_type = finfo_file($info, $file_name);
      $extension = pathinfo($file_name,PATHINFO_EXTENSION);
      
      //there is a bug with finfo_file();
      //https://bugs.php.net/bug.php?id=53035
      //
      // hard coding the correct mime types for presently needed file extensions
      switch($extension){
      
          case 'css':
              $mime_type = 'text/css';
          break;
          case 'js':
              $mime_type = 'application/javascript';
          default:
          break;
      }
      

      【讨论】:

        【解决方案3】:

        检查一下

        <?php
        $files = array ("css.css", "index.html", "js.js", "png.png");
        
            for ($i = 0; $i < count ($files); $i ++) {
                $files[$i] = preg_replace("%.*\.(\w)%i", "$1", $files[$i]);
            }
        
            echo $files[0]; //css
            echo $files[1]; //html
            echo $files[2]; //js
            echo $files[3]; //png
        ?>
        

        【讨论】:

          【解决方案4】:

          我最近遇到上传的文本文件被错误识别为“text/x-c++”的情况,因为它以关键字class开头强>。它被正确识别为 "text/plain" 和另一个第一个单词。 确实可能与浏览器识别算法有关,因为这也发生在这个网站上:https://htmlstrip.com/mime-file-type-checker

          【讨论】:

            【解决方案5】:

            您是否检查过服务器的 MIME 类型定义?我假设它使用服务器定义,就像浏览器使用客户端计算机定义上传文件一样。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-12-30
              • 2012-11-29
              • 2012-03-28
              • 2020-09-11
              • 1970-01-01
              • 2016-08-18
              相关资源
              最近更新 更多