Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
CRAP
100.00% covered (success)
100.00%
7 / 7
extension_guesser
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
3 / 3
5
100.00% covered (success)
100.00%
7 / 7
 is_supported
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
1 / 1
 guess
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
2 / 2
 map_extension_to_type
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
4 / 4
<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\mimetype;
class extension_guesser extends guesser_base
{
    /**
    * @var file extension map
    */
    protected $extension_map = array(
        '3dm'        => 'x-world/x-3dmf',
        '3dmf'        => 'x-world/x-3dmf',
        'a'        => 'application/octet-stream',
        'aab'        => 'application/x-authorware-bin',
        'aam'        => 'application/x-authorware-map',
        'aas'        => 'application/x-authorware-seg',
        'abc'        => 'text/vnd.abc',
        'acgi'        => 'text/html',
        'afl'        => 'video/animaflex',
        'ai'        => 'application/postscript',
        'aif'        => 'audio/aiff',
        'aifc'        => 'audio/aiff',
        'aiff'        => 'audio/aiff',
        'aim'        => 'application/x-aim',
        'aip'        => 'text/x-audiosoft-intra',
        'ani'        => 'application/x-navi-animation',
        'aos'        => 'application/x-nokia-9000-communicator-add-on-software',
        'aps'        => 'application/mime',
        'arc'        => 'application/octet-stream',
        'arj'        => 'application/arj',
        'art'        => 'image/x-jg',
        'asf'        => 'video/x-ms-asf',
        'asm'        => 'text/x-asm',
        'asp'        => 'text/asp',
        'asx'        => 'video/x-ms-asf',
        'au'        => 'audio/x-au',
        'avi'        => 'video/avi',
        'avs'        => 'video/avs-video',
        'bcpio'        => 'application/x-bcpio',
        'bin'        => 'application/x-binary',
        'bm'        => 'image/bmp',
        'bmp'        => 'image/bmp',
        'boo'        => 'application/book',
        'book'        => 'application/book',
        'boz'        => 'application/x-bzip2',
        'bsh'        => 'application/x-bsh',
        'bz'        => 'application/x-bzip',
        'bz2'        => 'application/x-bzip2',
        'c'        => 'text/x-c',
        'c++'        => 'text/x-c',
        'cat'        => 'application/vnd.ms-pki.seccat',
        'cc'        => 'text/plain',
        'ccad'        => 'application/clariscad',
        'cco'        => 'application/x-cocoa',
        'cdf'        => 'application/cdf',
        'cer'        => 'application/x-x509-ca-cert',
        'cha'        => 'application/x-chat',
        'chat'        => 'application/x-chat',
        'class'        => 'application/java',
        'com'        => 'application/octet-stream',
        'conf'        => 'text/plain',
        'cpio'        => 'application/x-cpio',
        'cpp'        => 'text/x-c',
        'cpt'        => 'application/x-cpt',
        'crl'        => 'application/pkix-crl',
        'crt'        => 'application/x-x509-ca-cert',
        'csh'        => 'application/x-csh',
        'css'        => 'text/css',
        'cxx'        => 'text/plain',
        'dcr'        => 'application/x-director',
        'deepv'        => 'application/x-deepv',
        'def'        => 'text/plain',
        'der'        => 'application/x-x509-ca-cert',
        'dif'        => 'video/x-dv',
        'dir'        => 'application/x-director',
        'dl'        => 'video/dl',
        'doc'        => 'application/msword',
        'dot'        => 'application/msword',
        'dp'        => 'application/commonground',
        'drw'        => 'application/drafting',
        'dump'        => 'application/octet-stream',
        'dv'        => 'video/x-dv',
        'dvi'        => 'application/x-dvi',
        'dwf'        => 'model/vnd.dwf',
        'dwg'        => 'image/x-dwg',
        'dxf'        => 'image/x-dwg',
        'dxr'        => 'application/x-director',
        'el'        => 'text/x-script.elisp',
        'elc'        => 'application/x-elc',
        'env'        => 'application/x-envoy',
        'eps'        => 'application/postscript',
        'es'        => 'application/x-esrehber',
        'etx'        => 'text/x-setext',
        'evy'        => 'application/x-envoy',
        'exe'        => 'application/octet-stream',
        'f'        => 'text/x-fortran',
        'f77'        => 'text/x-fortran',
        'f90'        => 'text/x-fortran',
        'fdf'        => 'application/vnd.fdf',
        'fif'        => 'image/fif',
        'fli'        => 'video/x-fli',
        'flo'        => 'image/florian',
        'flx'        => 'text/vnd.fmi.flexstor',
        'fmf'        => 'video/x-atomic3d-feature',
        'for'        => 'text/x-fortran',
        'fpx'        => 'image/vnd.fpx',
        'frl'        => 'application/freeloader',
        'funk'        => 'audio/make',
        'g'        => 'text/plain',
        'g3'        => 'image/g3fax',
        'gif'        => 'image/gif',
        'gl'        => 'video/x-gl',
        'gsd'        => 'audio/x-gsm',
        'gsm'        => 'audio/x-gsm',
        'gsp'        => 'application/x-gsp',
        'gss'        => 'application/x-gss',
        'gtar'        => 'application/x-gtar',
        'gz'        => 'application/x-gzip',
        'gzip'        => 'application/x-gzip',
        'h'        => 'text/x-h',
        'hdf'        => 'application/x-hdf',
        'help'        => 'application/x-helpfile',
        'hgl'        => 'application/vnd.hp-hpgl',
        'hh'        => 'text/x-h',
        'hlb'        => 'text/x-script',
        'hlp'        => 'application/hlp',
        'hpg'        => 'application/vnd.hp-hpgl',
        'hpgl'        => 'application/vnd.hp-hpgl',
        'hqx'        => 'application/x-binhex40',
        'hta'        => 'application/hta',
        'htc'        => 'text/x-component',
        'htm'        => 'text/html',
        'html'        => 'text/html',
        'htmls'        => 'text/html',
        'htt'        => 'text/webviewhtml',
        'htx'        => 'text/html',
        'ice'        => 'x-conference/x-cooltalk',
        'ico'        => 'image/x-icon',
        'idc'        => 'text/plain',
        'ief'        => 'image/ief',
        'iefs'        => 'image/ief',
        'iges'        => 'application/iges',
        'igs'        => 'application/iges',
        'ima'        => 'application/x-ima',
        'imap'        => 'application/x-httpd-imap',
        'inf'        => 'application/inf',
        'ins'        => 'application/x-internett-signup',
        'ip'        => 'application/x-ip2',
        'isu'        => 'video/x-isvideo',
        'it'        => 'audio/it',
        'iv'        => 'application/x-inventor',
        'ivr'        => 'i-world/i-vrml',
        'ivy'        => 'application/x-livescreen',
        'jam'        => 'audio/x-jam',
        'jav'        => 'text/x-java-source',
        'java'        => 'text/x-java-source',
        'jcm'        => 'application/x-java-commerce',
        'jfif'        => 'image/jpeg',
        'jfif-tbnl'    => 'image/jpeg',
        'jpe'        => 'image/jpeg',
        'jpeg'        => 'image/jpeg',
        'jpg'        => 'image/jpeg',
        'jps'        => 'image/x-jps',
        'js'        => 'application/x-javascript',
        'jut'        => 'image/jutvision',
        'kar'        => 'audio/midi',
        'ksh'        => 'text/x-script.ksh',
        'la'        => 'audio/x-nspaudio',
        'lam'        => 'audio/x-liveaudio',
        'latex'        => 'application/x-latex',
        'lha'        => 'application/x-lha',
        'lhx'        => 'application/octet-stream',
        'list'        => 'text/plain',
        'lma'        => 'audio/x-nspaudio',
        'log'        => 'text/plain',
        'lsp'        => 'text/x-script.lisp',
        'lst'        => 'text/plain',
        'lsx'        => 'text/x-la-asf',
        'ltx'        => 'application/x-latex',
        'lzh'        => 'application/x-lzh',
        'lzx'        => 'application/x-lzx',
        'm'        => 'text/x-m',
        'm1v'        => 'video/mpeg',
        'm2a'        => 'audio/mpeg',
        'm2v'        => 'video/mpeg',
        'm3u'        => 'audio/x-mpequrl',
        'man'        => 'application/x-troff-man',
        'map'        => 'application/x-navimap',
        'mar'        => 'text/plain',
        'mbd'        => 'application/mbedlet',
        'mc$'        => 'application/x-magic-cap-package-1.0',
        'mcd'        => 'application/x-mathcad',
        'mcf'        => 'text/mcf',
        'mcp'        => 'application/netmc',
        'me'        => 'application/x-troff-me',
        'mht'        => 'message/rfc822',
        'mhtml'        => 'message/rfc822',
        'mid'        => 'audio/x-midi',
        'midi'        => 'audio/x-midi',
        'mif'        => 'application/x-mif',
        'mime'        => 'www/mime',
        'mjf'        => 'audio/x-vnd.audioexplosion.mjuicemediafile',
        'mjpg'        => 'video/x-motion-jpeg',
        'mm'        => 'application/x-meme',
        'mme'        => 'application/base64',
        'mod'        => 'audio/x-mod',
        'moov'        => 'video/quicktime',
        'mov'        => 'video/quicktime',
        'movie'        => 'video/x-sgi-movie',
        'mp2'        => 'audio/x-mpeg',
        'mp3'        => 'audio/x-mpeg-3',
        'mpa'        => 'audio/mpeg',
        'mpc'        => 'application/x-project',
        'mpe'        => 'video/mpeg',
        'mpeg'        => 'video/mpeg',
        'mpg'        => 'video/mpeg',
        'mpga'        => 'audio/mpeg',
        'mpp'        => 'application/vnd.ms-project',
        'mpt'        => 'application/x-project',
        'mpv'        => 'application/x-project',
        'mpx'        => 'application/x-project',
        'mrc'        => 'application/marc',
        'ms'        => 'application/x-troff-ms',
        'mv'        => 'video/x-sgi-movie',
        'my'        => 'audio/make',
        'mzz'        => 'application/x-vnd.audioexplosion.mzz',
        'nap'        => 'image/naplps',
        'naplps'    => 'image/naplps',
        'nc'        => 'application/x-netcdf',
        'ncm'        => 'application/vnd.nokia.configuration-message',
        'nif'        => 'image/x-niff',
        'niff'        => 'image/x-niff',
        'nix'        => 'application/x-mix-transfer',
        'nsc'        => 'application/x-conference',
        'nvd'        => 'application/x-navidoc',
        'o'        => 'application/octet-stream',
        'oda'        => 'application/oda',
        'omc'        => 'application/x-omc',
        'omcd'        => 'application/x-omcdatamaker',
        'omcr'        => 'application/x-omcregerator',
        'p'        => 'text/x-pascal',
        'p10'        => 'application/x-pkcs10',
        'p12'        => 'application/x-pkcs12',
        'p7a'        => 'application/x-pkcs7-signature',
        'p7c'        => 'application/x-pkcs7-mime',
        'p7m'        => 'application/x-pkcs7-mime',
        'p7r'        => 'application/x-pkcs7-certreqresp',
        'p7s'        => 'application/pkcs7-signature',
        'part'        => 'application/pro_eng',
        'pas'        => 'text/pascal',
        'pbm'        => 'image/x-portable-bitmap',
        'pcl'        => 'application/x-pcl',
        'pct'        => 'image/x-pict',
        'pcx'        => 'image/x-pcx',
        'pdb'        => 'chemical/x-pdb',
        'pdf'        => 'application/pdf',
        'pfunk'        => 'audio/make.my.funk',
        'pgm'        => 'image/x-portable-greymap',
        'pic'        => 'image/pict',
        'pict'        => 'image/pict',
        'pkg'        => 'application/x-newton-compatible-pkg',
        'pko'        => 'application/vnd.ms-pki.pko',
        'pl'        => 'text/x-script.perl',
        'plx'        => 'application/x-pixclscript',
        'pm'        => 'text/x-script.perl-module',
        'pm4'        => 'application/x-pagemaker',
        'pm5'        => 'application/x-pagemaker',
        'png'        => 'image/png',
        'pnm'        => 'image/x-portable-anymap',
        'pot'        => 'application/mspowerpoint',
        'pov'        => 'model/x-pov',
        'ppa'        => 'application/vnd.ms-powerpoint',
        'ppm'        => 'image/x-portable-pixmap',
        'pps'        => 'application/mspowerpoint',
        'ppt'        => 'application/mspowerpoint',
        'ppz'        => 'application/mspowerpoint',
        'pre'        => 'application/x-freelance',
        'prt'        => 'application/pro_eng',
        'ps'        => 'application/postscript',
        'psd'        => 'application/octet-stream',
        'pvu'        => 'paleovu/x-pv',
        'pwz'        => 'application/vnd.ms-powerpoint',
        'py'        => 'text/x-script.phyton',
        'pyc'        => 'applicaiton/x-bytecode.python',
        'qcp'        => 'audio/vnd.qcelp',
        'qd3'        => 'x-world/x-3dmf',
        'qd3d'        => 'x-world/x-3dmf',
        'qif'        => 'image/x-quicktime',
        'qt'        => 'video/quicktime',
        'qtc'        => 'video/x-qtc',
        'qti'        => 'image/x-quicktime',
        'qtif'        => 'image/x-quicktime',
        'ra'        => 'audio/x-realaudio',
        'ram'        => 'audio/x-pn-realaudio',
        'ras'        => 'image/x-cmu-raster',
        'rast'        => 'image/cmu-raster',
        'rexx'        => 'text/x-script.rexx',
        'rf'        => 'image/vnd.rn-realflash',
        'rgb'        => 'image/x-rgb',
        'rm'        => 'audio/x-pn-realaudio',
        'rmi'        => 'audio/mid',
        'rmm'        => 'audio/x-pn-realaudio',
        'rmp'        => 'audio/x-pn-realaudio',
        'rng'        => 'application/vnd.nokia.ringing-tone',
        'rnx'        => 'application/vnd.rn-realplayer',
        'roff'        => 'application/x-troff',
        'rp'        => 'image/vnd.rn-realpix',
        'rpm'        => 'audio/x-pn-realaudio-plugin',
        'rt'        => 'text/richtext',
        'rtf'        => 'text/richtext',
        'rtx'        => 'text/richtext',
        'rv'        => 'video/vnd.rn-realvideo',
        's'        => 'text/x-asm',
        's3m'        => 'audio/s3m',
        'saveme'    => 'application/octet-stream',
        'sbk'        => 'application/x-tbook',
        'scm'        => 'video/x-scm',
        'sdml'        => 'text/plain',
        'sdp'        => 'application/x-sdp',
        'sdr'        => 'application/sounder',
        'sea'        => 'application/x-sea',
        'set'        => 'application/set',
        'sgm'        => 'text/x-sgml',
        'sgml'        => 'text/x-sgml',
        'sh'        => 'text/x-script.sh',
        'shar'        => 'application/x-shar',
        'shtml'        => 'text/x-server-parsed-html',
        'sid'        => 'audio/x-psid',
        'sit'        => 'application/x-stuffit',
        'skd'        => 'application/x-koan',
        'skm'        => 'application/x-koan',
        'skp'        => 'application/x-koan',
        'skt'        => 'application/x-koan',
        'sl'        => 'application/x-seelogo',
        'smi'        => 'application/smil',
        'smil'        => 'application/smil',
        'snd'        => 'audio/x-adpcm',
        'sol'        => 'application/solids',
        'spc'        => 'text/x-speech',
        'spl'        => 'application/futuresplash',
        'spr'        => 'application/x-sprite',
        'sprite'    => 'application/x-sprite',
        'src'        => 'application/x-wais-source',
        'ssi'        => 'text/x-server-parsed-html',
        'ssm'        => 'application/streamingmedia',
        'sst'        => 'application/vnd.ms-pki.certstore',
        'step'        => 'application/step',
        'stl'        => 'application/vnd.ms-pki.stl',
        'stp'        => 'application/step',
        'sv4cpio'    => 'application/x-sv4cpio',
        'sv4crc'    => 'application/x-sv4crc',
        'svf'        => 'image/x-dwg',
        'svr'        => 'application/x-world',
        'swf'        => 'application/x-shockwave-flash',
        't'        => 'application/x-troff',
        'talk'        => 'text/x-speech',
        'tar'        => 'application/x-tar',
        'tbk'        => 'application/x-tbook',
        'tcl'        => 'text/x-script.tcl',
        'tcsh'        => 'text/x-script.tcsh',
        'tex'        => 'application/x-tex',
        'texi'        => 'application/x-texinfo',
        'texinfo'    => 'application/x-texinfo',
        'text'        => 'text/plain',
        'tgz'        => 'application/x-compressed',
        'tif'        => 'image/tiff',
        'tiff'        => 'image/tiff',
        'tr'        => 'application/x-troff',
        'tsi'        => 'audio/tsp-audio',
        'tsp'        => 'audio/tsplayer',
        'tsv'        => 'text/tab-separated-values',
        'turbot'    => 'image/florian',
        'txt'        => 'text/plain',
        'uil'        => 'text/x-uil',
        'uni'        => 'text/uri-list',
        'unis'        => 'text/uri-list',
        'unv'        => 'application/i-deas',
        'uri'        => 'text/uri-list',
        'uris'        => 'text/uri-list',
        'ustar'        => 'multipart/x-ustar',
        'uu'        => 'text/x-uuencode',
        'uue'        => 'text/x-uuencode',
        'vcd'        => 'application/x-cdlink',
        'vcs'        => 'text/x-vcalendar',
        'vda'        => 'application/vda',
        'vdo'        => 'video/vdo',
        'vew'        => 'application/groupwise',
        'viv'        => 'video/vivo',
        'vivo'        => 'video/vivo',
        'vmd'        => 'application/vocaltec-media-desc',
        'vmf'        => 'application/vocaltec-media-file',
        'voc'        => 'audio/voc',
        'vos'        => 'video/vosaic',
        'vox'        => 'audio/voxware',
        'vqe'        => 'audio/x-twinvq-plugin',
        'vqf'        => 'audio/x-twinvq',
        'vql'        => 'audio/x-twinvq-plugin',
        'vrml'        => 'application/x-vrml',
        'vrt'        => 'x-world/x-vrt',
        'vsd'        => 'application/x-visio',
        'vst'        => 'application/x-visio',
        'vsw'        => 'application/x-visio',
        'w60'        => 'application/wordperfect6.0',
        'w61'        => 'application/wordperfect6.1',
        'w6w'        => 'application/msword',
        'wav'        => 'audio/wav',
        'wb1'        => 'application/x-qpro',
        'wbmp'        => 'image/vnd.wap.wbmp',
        'web'        => 'application/vnd.xara',
        'wiz'        => 'application/msword',
        'wk1'        => 'application/x-123',
        'wmf'        => 'windows/metafile',
        'wml'        => 'text/vnd.wap.wml',
        'wmlc'        => 'application/vnd.wap.wmlc',
        'wmls'        => 'text/vnd.wap.wmlscript',
        'wmlsc'        => 'application/vnd.wap.wmlscriptc',
        'word'        => 'application/msword',
        'wp'        => 'application/wordperfect',
        'wp5'        => 'application/wordperfect',
        'wp6'        => 'application/wordperfect',
        'wpd'        => 'application/wordperfect',
        'wq1'        => 'application/x-lotus',
        'wri'        => 'application/mswrite',
        'wrl'        => 'model/vrml',
        'wrz'        => 'model/vrml',
        'wsc'        => 'text/scriplet',
        'wsrc'        => 'application/x-wais-source',
        'wtk'        => 'application/x-wintalk',
        'xbm'        => 'image/xbm',
        'xdr'        => 'video/x-amt-demorun',
        'xgz'        => 'xgl/drawing',
        'xif'        => 'image/vnd.xiff',
        'xl'        => 'application/excel',
        'xla'        => 'application/excel',
        'xlb'        => 'application/excel',
        'xlc'        => 'application/excel',
        'xld'        => 'application/excel',
        'xlk'        => 'application/excel',
        'xll'        => 'application/excel',
        'xlm'        => 'application/excel',
        'xls'        => 'application/excel',
        'xlt'        => 'application/excel',
        'xlv'        => 'application/excel',
        'xlw'        => 'application/excel',
        'xm'        => 'audio/xm',
        'xml'        => 'text/xml',
        'xmz'        => 'xgl/movie',
        'xpix'        => 'application/x-vnd.ls-xpix',
        'xpm'        => 'image/xpm',
        'x-png'        => 'image/png',
        'xsr'        => 'video/x-amt-showrun',
        'xwd'        => 'image/x-xwindowdump',
        'xyz'        => 'chemical/x-pdb',
        'z'        => 'application/x-compressed',
        'zip'        => 'application/x-zip-compressed',
        'zoo'        => 'application/octet-stream',
        'zsh'        => 'text/x-script.zsh',
    );
    /**
    * {@inheritdoc}
    */
    public function is_supported()
    {
        return true;
    }
    /**
    * {@inheritdoc}
    */
    public function guess($file, $file_name = '')
    {
        $file_name = (empty($file_name)) ? $file : $file_name;
        return $this->map_extension_to_type($file_name);
    }
    /**
    * Map extension of supplied file_name to mime type
    *
    * @param string $file_name Path to file or filename
    *
    * @return string|null Mimetype if known or null if not
    */
    protected function map_extension_to_type($file_name)
    {
        $extension = pathinfo($file_name, PATHINFO_EXTENSION);
        if (isset($this->extension_map[$extension]))
        {
            return $this->extension_map[$extension];
        }
        else
        {
            return null;
        }
    }
}