Why is mime_content_type() deprecated in PHP?

后端 未结 5 1171
悲&欢浪女
悲&欢浪女 2020-11-28 11:06

I\'m just curious to know why mime_content_type() is now considered deprecated.

This method for determining the mime type is much easier than the replacement Fileinf

相关标签:
5条回答
  • 2020-11-28 11:29

    The method is not deprecated!

    It once was incorrectly marked as deprecated in the manual, but it has been fixed https://bugs.php.net/bug.php?id=71367 on the 14th of January 2016. However, at the moment, it is still incorrectly marked deprecated in the German, Spanish and Chinese manual.

    Feel free to use mime_content_type() whenever you like :).

    0 讨论(0)
  • 2020-11-28 11:39

    Another way is to pass to the constructor constant FILEINFO_MIME.

    $finfo = new finfo(FILEINFO_MIME);
    $type  = $finfo->file('path/filename');
    
    0 讨论(0)
  • 2020-11-28 11:43

    Using finfo_file and finfo_open, and FILEINFO_MIME_TYPE:

    finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $filename );
    

    Here's a small wrapper to cover different PHP environments, derived from 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;
    }
    

    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 );
    }
    
    0 讨论(0)
  • 2020-11-28 11:49

    This works:

    if (!function_exists('mime_content_type')) {
    
        function mime_content_type($filename)
        {
            $finfo = finfo_open(FILEINFO_MIME_TYPE);
            $mimeType = finfo_file($finfo, $filename);
            finfo_close($finfo);
    
            return $mimeType;
        }
    }
    
    0 讨论(0)
  • 2020-11-28 11:53

    I guess it's because Fileinfo can return more information about files.

    EDIT: Here is a replacement hack:

    function _mime_content_type($filename) {
        $result = new finfo();
    
        if (is_resource($result) === true) {
            return $result->file($filename, FILEINFO_MIME_TYPE);
        }
    
        return false;
    }
    
    0 讨论(0)
提交回复
热议问题