Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
Total | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
CRAP | |
100.00% |
7 / 7 |
extension_guesser | |
100.00% |
1 / 1 |
|
100.00% |
3 / 3 |
5 | |
100.00% |
7 / 7 |
is_supported | |
100.00% |
1 / 1 |
1 | |
100.00% |
1 / 1 |
|||
guess | |
100.00% |
1 / 1 |
2 | |
100.00% |
2 / 2 |
|||
map_extension_to_type | |
100.00% |
1 / 1 |
2 | |
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; | |
} | |
} | |
} |