【问题标题】:Why is mime_content_type() deprecated in PHP?为什么在 PHP 中不推荐使用 mime_content_type()?
【发布时间】:2010-11-18 20:03:09
【问题描述】:

我只是想知道为什么 mime_content_type() 现在被认为已弃用。

这种确定 mime 类型的方法比替换 Fileinfo 功能要容易得多。

【问题讨论】:

  • 我只是查看了手册中 mime_content_type 的页面,并没有说它已被弃用!它甚至包括 PHP 7 作为受支持的 PHP 版本
  • 它没有被弃用看我的回答。

标签: php mime-types deprecated


【解决方案1】:

该方法未被弃用!

它曾经在手册中被错误地标记为已弃用,但已于 2016 年 1 月 14 日修复https://bugs.php.net/bug.php?id=71367然而,目前它在德语、西班牙语和中文手册中仍被错误地标记为 deprecated。

请随时使用mime_content_type() :)。

【讨论】:

    【解决方案2】:

    我猜是因为 Fileinfo 可以return more information about files

    编辑:这是一个替换 hack:

    function _mime_content_type($filename) {
        $result = new finfo();
    
        if (is_resource($result) === true) {
            return $result->file($filename, FILEINFO_MIME_TYPE);
        }
    
        return false;
    }
    

    【讨论】:

    • 虽然这可能是真的,但事实仍然是它更难配置并且使用起来更费力。它不能保持不贬低而只使用 finfo 功能吗?
    • 我使用类似的技巧来确定文件的文件类型,但首先使用 mime_content_type() 方法,因为我发现它在服务器之间更可靠。但是我仍然对为什么现在不推荐使用这种方法感到困惑?
    • 我同意你的两个 cmets,他们可以重写函数以依赖 finfo 类。
    • $result = new finfo();不行,应该是新的 finfo(FILEINFO_MIME_TYPE);
    • @Josiah 该功能未被弃用 - 请参阅我的回答。
    【解决方案3】:

    另一种方法是传递给构造函数常量FILEINFO_MIME

    $finfo = new finfo(FILEINFO_MIME);
    $type  = $finfo->file('path/filename');
    

    【讨论】:

      【解决方案4】:

      使用finfo_filefinfo_openFILEINFO_MIME_TYPE

      finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $filename );
      

      这是一个涵盖不同 PHP 环境的小包装器,源自CSSMin.php in MediaWiki 1.20

      function getMimeType( $filename ) {
              $realpath = realpath( $filename );
              if ( $realpath
                      && function_exists( 'finfo_file' )
                      && function_exists( 'finfo_open' )
                      && defined( 'FILEINFO_MIME_TYPE' )
              ) {
                      // Use the Fileinfo PECL extension (PHP 5.3+)
                      return finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $realpath );
              }
              if ( function_exists( 'mime_content_type' ) ) {
                      // Deprecated in PHP 5.3
                      return mime_content_type( $realpath );
              }
              return false;
      }
      

      编辑:感谢@Adam@ficuscr 澄清这个函数实际上没有被弃用

      从 MediaWiki 1.30 开始,上面的代码基本上被更改(返回)为:

      function getMimeType( $filename ) {
              return mime_content_type( $filename );
      }
      

      【讨论】:

      • 在 5.3 中实际上并没有被弃用,只是错误的文档/错误。实际上支持 5.3 > 和 7.0。
      猜你喜欢
      • 2011-03-05
      • 2016-02-23
      • 2017-11-04
      • 2011-10-22
      • 2011-04-11
      • 2021-10-12
      • 2012-12-07
      • 2012-05-16
      • 2020-06-29
      相关资源
      最近更新 更多