Question

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 Fileinfo functionality.

Was it helpful?

Solution

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

OTHER TIPS

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 :).

Another way is to pass to the constructor constant FILEINFO_MIME.

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

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

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;
    }
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top