为什么在PHP中mime_content_type()被弃用了?

33
我只是好奇为什么mime_content_type()现在被视为过时的。
这种确定mime类型的方法比替代功能Fileinfo要简单得多。

4
我刚刚查看了手册中的mime_content_type页面,它并没有说明该函数已被弃用!它甚至将PHP 7列为受支持的PHP版本。 - GordonM
11
不被弃用,请看我的回答。 - Adam
4个回答

58

这种方法没有被弃用!

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

随意使用mime_content_type(),它不会有任何问题 :)


26
我猜这是因为Fileinfo可以提供有关文件的更多信息。编辑:这里有一个替代的解决方法:
function _mime_content_type($filename) {
    $result = new finfo();
    
    if (is_resource($result) === true) {
        return $result->file($filename, FILEINFO_MIME_TYPE);
    }
    
    return false;
}

11
尽管这可能是真的,但事实仍然是配置更加困难,使用需要更多的努力。它不能保持未弃用状态并只利用finfo函数吗? - Josiah
我使用类似的技巧来确定文件类型,但首先使用mime_content_type()方法,因为我发现它在不同服务器上更可靠。然而,我仍然困惑为什么这种方法现在已被弃用? - Josiah
1
$result = new finfo(); 不起作用,应该是 new finfo(FILEINFO_MIME_TYPE); - jk jk
6
@Josiah 这个函数并没有被弃用 - 可以参考我的回答。 - Adam
最新的 PHP 中找不到 finfo。 - ina
显示剩余2条评论

6

使用 finfo_filefinfo_open,以及 FILEINFO_MIME_TYPE 常量:

finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $filename );

这是一个小型包装器,用于覆盖不同的PHP环境,源自于MediaWiki 1.20中的CSSMin.php(链接)。请看下面的内容:

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;
}

EDIT: Thanks @Adam and @ficuscr for clarifying that this function was, in fact, not deprecated.

As of MediaWiki 1.30, the above code was essentially changed (back) to:

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


1
实际上在5.3中并没有被弃用,只是文档/错误不好而已。事实上支持的版本为5.3>和7.0。 - ficuscr

6
另一种方法是将常量 FILEINFO_MIME 传递给构造函数。
$finfo = new finfo(FILEINFO_MIME);
$type  = $finfo->file('path/filename');

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接