roundcubemail/program/lib/Roundcube/rcube_mime.php
public static function file_content_type($path, $name, $failover = 'application/octet-stream', $is_stream = false, $skip_suffix = false)
    {
        static $mime_ext = array();

        $mime_type  = null;
        $config     = rcube::get_instance()->config;
        $mime_magic = $config->get('mime_magic');

        if (!$skip_suffix && empty($mime_ext)) {
            foreach ($config->resolve_paths('mimetypes.php') as $fpath) {
                $mime_ext = array_merge($mime_ext, (array) @include($fpath));
            }
        }

        // use file name suffix with hard-coded mime-type map
        if (!$skip_suffix && is_array($mime_ext) && $name) {
            if ($suffix = substr($name, strrpos($name, '.')+1)) {
                $mime_type = $mime_ext[strtolower($suffix)];
            }
        }

        // try fileinfo extension if available
        if (!$mime_type && function_exists('finfo_open')) {
            // null as a 2nd argument should be the same as no argument
            // this however is not true on all systems/versions
            if ($mime_magic) {
                $finfo = finfo_open(FILEINFO_MIME, $mime_magic);
            }
            else {
                $finfo = finfo_open(FILEINFO_MIME);
            }

            if ($finfo) {
                if ($is_stream)
                    $mime_type = finfo_buffer($finfo, $path);
                else
                    $mime_type = finfo_file($finfo, $path);
                finfo_close($finfo);
            }
        }

        // try PHP's mime_content_type
        if (!$mime_type && !$is_stream && function_exists('mime_content_type')) {
            $mime_type = @mime_content_type($path);
        }

        // fall back to user-submitted string
        if (!$mime_type) {
            $mime_type = $failover;
        }
        else {
            // Sometimes (PHP-5.3?) content-type contains charset definition,
            // Remove it (#1487122) also "charset=binary" is useless
            $mime_type = array_shift(preg_split('/[; ]/', $mime_type));
        }

        return $mime_type;
    }
public static function file_content_type($path, $name, $failover = 'application/octet-stream', $is_stream = false, $skip_suffix = false)
    {
        static $mime_ext = array();

        $mime_type  = null;
        $config     = rcube::get_instance()->config;
        $mime_magic = $config->get('mime_magic');

        if (!$skip_suffix && empty($mime_ext)) {
            foreach ($config->resolve_paths('mimetypes.php') as $fpath) {
                $mime_ext = array_merge($mime_ext, (array) @include($fpath));
            }
        }

        // use file name suffix with hard-coded mime-type map
        if (!$skip_suffix && is_array($mime_ext) && $name) {
            if ($suffix = substr($name, strrpos($name, '.')+1)) {
                $mime_type = $mime_ext[strtolower($suffix)];
            }
        }

        // try fileinfo extension if available
        if (!$mime_type && function_exists('finfo_open')) {
            // null as a 2nd argument should be the same as no argument
            // this however is not true on all systems/versions
            if ($mime_magic) {
                $finfo = finfo_open(FILEINFO_MIME, $mime_magic);
            }
            else {
                $finfo = finfo_open(FILEINFO_MIME);
            }

            if ($finfo) {
                if ($is_stream)
                    $mime_type = finfo_buffer($finfo, $path);
                else
                    $mime_type = finfo_file($finfo, $path);
                finfo_close($finfo);
            }
        }

        // try PHP's mime_content_type
        if (!$mime_type && !$is_stream && function_exists('mime_content_type')) {
            $mime_type = @mime_content_type($path);
        }

        // fall back to user-submitted string
        if (!$mime_type) {
            $mime_type = $failover;
        }
        else {
            // Sometimes (PHP-5.3?) content-type contains charset definition,
            // Remove it (#1487122) also "charset=binary" is useless
            $mime_type = array_shift(preg_split('/[; ]/', $mime_type));
        }

        return $mime_type;
    }
public static function file_content_type ( $ path , $ name , $ failover = 'application/octet-stream' , $ is_stream = false , $ skip_suffix = false ) { static $ mime_ext = array ( ) ; $ mime_type = null ; $ config = rcube :: get_instance ( ) -> config ; $ mime_magic = $ config -> get ( 'mime_magic' ) ; if ( ! $ skip_suffix && empty ( $ mime_ext ) ) { foreach ( $ config -> resolve_paths ( 'mimetypes.php' ) as $ fpath ) { $ mime_ext = array_merge ( $ mime_ext , ( array ) @ include ( $ fpath ) ) ; } } // use file name suffix with hard-coded mime-type map if ( ! $ skip_suffix && is_array ( $ mime_ext ) && $ name ) { if ( $ suffix = substr ( $ name , strrpos ( $ name , '.' ) + 1 ) ) { $ mime_type = $ mime_ext [ strtolower ( $ suffix ) ] ; } } // try fileinfo extension if available if ( ! $ mime_type && function_exists ( 'finfo_open' ) ) { // null as a 2nd argument should be the same as no argument // this however is not true on all systems/versions if ( $ mime_magic ) { $ finfo = finfo_open ( FILEINFO_MIME , $ mime_magic ) ; } else { $ finfo = finfo_open ( FILEINFO_MIME ) ; } if ( $ finfo ) { if ( $ is_stream ) $ mime_type = finfo_buffer ( $ finfo , $ path ) ; else $ mime_type = finfo_file ( $ finfo , $ path ) ; finfo_close ( $ finfo ) ; } } // try PHP's mime_content_type if ( ! $ mime_type && ! $ is_stream && function_exists ( 'mime_content_type' ) ) { $ mime_type = @ mime_content_type ( $ path ) ; } // fall back to user-submitted string if ( ! $ mime_type ) { $ mime_type = $ failover ; } else { // Sometimes (PHP-5.3?) content-type contains charset definition, // Remove it (#1487122) also "charset=binary" is useless $ mime_type = array_shift ( preg_split ( '/[; ]/' , $ mime_type ) ) ; } return $ mime_type ; }
A method to guess the mime_type of an attachment.

@param string  $path        Path to the file or file contents
@param string  $name        File name (with suffix)
@param string  $failover    Mime type supplied for failover
@param boolean $is_stream   Set to True if $path contains file contents
@param boolean $skip_suffix Set to True if the config/mimetypes.php mappig should be ignored

@return string
@author Till Klampaeckel <till@php.net>
@see    http://de2.php.net/manual/en/ref.fileinfo.php
@see    http://de2.php.net/mime_content_type
A method to guess the mime_type of an attachment .