-
- Convert a MIME type to a file extension, based
-
- on the global Horde and application specific config files.
-
-
- If we cannot map the type to a file extension, we return false.
-
-
-
@param string $_type The MIME type to be mapped to a file extension.
-
-
@return string The file extension of the MIME type.
- */
- public static function mime2ext($_type)
- {
-
$type = strtolower($_type);
-
if (isset(self::$mime_alias_map[$type])) $type = self::$mime_alias_map[$type];
-
$key = array_search($type, self::$mime_extension_map);
-
if (empty($type) || $key === false)
-
{
-
return false;
-
}
-
return $key;
- }
-
- /**
-
- Fix old / aliased mime-types by returning valid/default mime-type
-
-
-
-
@return string new type, of $alias, if there is no alias defined for it
- */
- public static function fix_mime_type($_alias)
- {
-
$alias = strtolower($_alias);
-
-
if (isset(self::$mime_alias_map[$alias]))
-
{
-
return self::$mime_alias_map[$alias];
-
}
-
return $alias;
- }
-
- /**
-
- Uses variants of the UNIX “file” command to attempt to determine the
-
- MIME type of an unknown file.
-
-
-
@param string $path filename (including full path) of file to analyze
-
-
-
@return string The MIME type of the file. Returns false if either
-
-
- */
- public static function analyze_file($path)
- {
-
// If the PHP Mimetype extension is available, use that.
-
if (function_exists('mime_content_type'))
-
{
-
return mime_content_type($path);
-
}
-
else
-
{
-
// Use a built-in magic file.
-
if (!($fp = @fopen($path, 'rb')))
-
{
-
return false;
-
}
-
foreach (self::$mime_magic_file as $offset => $odata)
-
{
-
foreach ($odata as $length => $ldata)
-
{
-
@fseek($fp, $offset, SEEK_SET);
-
$lookup = @fread($fp, $length);
-
if (!empty($ldata[$lookup]))
-
{
-
fclose($fp);
-
return $ldata[$lookup];
-
}
-
}
-
}
-
fclose($fp);
-
}
-
return false;
- }
-
- /**
-
- Instead of using an existing file a chunk of data is used for
-
- testing. Best to handle the file creation here, to make sure
-
- it is secure and it is properly cleaned up. Really just
-
- a temp file creation and clean up method wrapper for analyze_file()
-
-
-
@param string $data the data to analyze
-
-
-
@param string MIME type false for none.
-
-
- */
- public static function analyze_data($data)
- {
-
if(!is_writeable(@$GLOBALS['egw_info']['server']['temp_dir']))
-
{
-
//nothing we can do but bail out
-
return false;
-
}
-
-
mt_srand(time());
-
$filename = $GLOBALS['egw_info']['server']['temp_dir'] . SEP
-
. md5( time() + mt_rand() ) . '.tmp';
-
-
$fp = @fopen($filename, 'ab');
-
if(!$fp || !$data)
-
{
-
//houston we have a problem - bail out
-
return false;
-
}
-
-
if(!fwrite($fp, $data))
-
{
-
//bail out again
-
return false;
-
}
-
fclose($fp);
-
chmod($filename, 0600); //just to be cautious
-
-
$mime = self::analyze_file($filename);
-
-
unlink($filename);//remove the temp file
-
-
return $mime;
- }
-
- /**
-
- Get an array containing a mapping of common file extensions to
-
-
-
-
-
-
-
-
@author ralfbecker - convert to a static array
-
-
-
@var array of extenstion to mime mappings
- */
- static $mime_extension_map = array(
-
'txt' => 'text/plain', // should be first, so text/plain maps back to .txt
-
'3dml' => 'text/vnd.in3d.3dml',
-
'3ds' => 'image/x-3ds',
-
'3g2' => 'video/3gpp2',
-
'3ga' => 'video/3gpp',
-
'3gp' => 'video/3gpp',
-
'3gp2' => 'video/3gpp2',
-
'3gpp' => 'video/3gpp',
-
'3gpp2' => 'video/3gpp2',
-
'7z' => 'application/x-7z-compressed',
-
'C' => 'text/x-c++src',
-
'Z' => 'application/x-compress',
-
'a' => 'application/x-archive',
-
'aab' => 'application/x-authorware-bin',
-
'aac' => 'audio/x-aac',
-
'aam' => 'application/x-authorware-map',
-
'aas' => 'application/x-authorware-seg',
-
'abw' => 'application/x-abiword',
-
'abw.crashed' => 'application/x-abiword',
-
'abw.gz' => 'application/x-abiword',
-
'ac' => 'application/pkix-attr-cert',
-
'ac3' => 'audio/ac3',
-
'acc' => 'application/vnd.americandynamics.acc',
-
'ace' => 'application/x-ace-compressed',
-
'acu' => 'application/vnd.acucobol',
-
'acutc' => 'application/vnd.acucorp',
-
'adb' => 'text/x-adasrc',
-
'adp' => 'audio/adpcm',
-
'ads' => 'text/x-adasrc',
-
'aep' => 'application/vnd.audiograph',
-
'afm' => 'application/x-font-type1',
-
'afp' => 'application/vnd.ibm.modcap',
-
'ag' => 'image/x-applix-graphics',
-
'ahead' => 'application/vnd.ahead.space',
-
'ai' => 'application/postscript',
-
'aif' => 'audio/x-aiff',
-
'aifc' => 'audio/x-aiff',
-
'aiff' => 'audio/x-aiff',
-
'aiffc' => 'audio/x-aifc',
-
'air' => 'application/vnd.adobe.air-application-installer-package+zip',
-
'ait' => 'application/vnd.dvb.ait',
-
'al' => 'application/x-perl',
-
'alz' => 'application/x-alz',
-
'ami' => 'application/vnd.amiga.ami',
-
'amr' => 'audio/AMR',
-
'amz' => 'audio/x-amzxml',
-
'ani' => 'application/x-navi-animation',
-
'anx' => 'application/annodex',
-
'ape' => 'audio/x-ape',
-
'apk' => 'application/vnd.android.package-archive',
-
'appcache' => 'text/cache-manifest',
-
'application' => 'application/x-ms-application',
-
'apr' => 'application/vnd.lotus-approach',
-
'ar' => 'application/x-archive',
-
'arc' => 'application/x-freearc',
-
'arj' => 'application/x-arj',
-
'arw' => 'image/x-sony-arw',
-
'as' => 'application/x-applix-spreadsheet',
-
'asc' => 'application/pgp-signature',
-
'asf' => 'video/x-ms-asf',
-
'asm' => 'text/x-asm',
-
'aso' => 'application/vnd.accpac.simply.aso',
-
'asp' => 'application/x-asp',
-
'ass' => 'text/x-ssa',
-
'asx' => 'video/x-ms-asf',
-
'atc' => 'application/vnd.acucorp',
-
'atom' => 'application/atom+xml',
-
'atomcat' => 'application/atomcat+xml',
-
'atomsvc' => 'application/atomsvc+xml',
-
'atx' => 'application/vnd.antix.game-component',
-
'au' => 'audio/basic',
-
'avf' => 'video/x-msvideo',
-
'avi' => 'video/x-msvideo',
-
'aw' => 'application/applixware',
-
'awb' => 'audio/AMR-WB',
-
'awk' => 'application/x-awk',
-
'axa' => 'audio/annodex',
-
'axv' => 'video/annodex',
-
'azf' => 'application/vnd.airzip.filesecure.azf',
-
'azs' => 'application/vnd.airzip.filesecure.azs',
-
'azw' => 'application/vnd.amazon.ebook',
-
'bak' => 'application/x-trash',
-
'bat' => 'application/x-msdownload',
-
'bcpio' => 'application/x-bcpio',
-
'bdf' => 'application/x-font-bdf',
-
'bdm' => 'application/vnd.syncml.dm+wbxml',
-
'bdmv' => 'video/mp2t',
-
'bed' => 'application/vnd.realvnc.bed',
-
'bh2' => 'application/vnd.fujitsu.oasysprs',
-
'bib' => 'text/x-bibtex',
-
'bin' => 'application/octet-stream',
-
'blb' => 'application/x-blorb',
-
'blend' => 'application/x-blender',
-
'blender' => 'application/x-blender',
-
'blorb' => 'application/x-blorb',
-
'bmi' => 'application/vnd.bmi',
-
'bmp' => 'image/bmp',
-
'book' => 'application/vnd.framemaker',
-
'box' => 'application/vnd.previewsystems.box',
-
'boz' => 'application/x-bzip2',
-
'bpk' => 'application/octet-stream',
-
'btif' => 'image/prs.btif',
-
'bz' => 'application/x-bzip',
-
'bz2' => 'application/x-bzip2',
-
'c' => 'text/x-c',
-
'c++' => 'text/x-c++src',
-
'c11amc' => 'application/vnd.cluetrust.cartomobile-config',
-
'c11amz' => 'application/vnd.cluetrust.cartomobile-config-pkg',
-
'c4d' => 'application/vnd.clonk.c4group',
-
'c4f' => 'application/vnd.clonk.c4group',
-
'c4g' => 'application/vnd.clonk.c4group',
-
'c4p' => 'application/vnd.clonk.c4group',
-
'c4u' => 'application/vnd.clonk.c4group',
-
'cab' => 'application/vnd.ms-cab-compressed',
-
'caf' => 'audio/x-caf',
-
'cap' => 'application/vnd.tcpdump.pcap',
-
'car' => 'application/vnd.curl.car',
-
'cat' => 'application/vnd.ms-pki.seccat',
-
'cb7' => 'application/x-cbr',
-
'cba' => 'application/x-cbr',
-
'cbl' => 'text/x-cobol',
-
'cbr' => 'application/x-cbr',
-
'cbt' => 'application/x-cbr',
-
'cbz' => 'application/x-cbr',
-
'cc' => 'text/x-c',
-
'ccmx' => 'application/x-ccmx',
-
'cct' => 'application/x-director',
-
'ccxml' => 'application/ccxml+xml',
-
'cdbcmsg' => 'application/vnd.contact.cmsg',
-
'cdf' => 'application/x-netcdf',
-
'cdkey' => 'application/vnd.mediastation.cdkey',
-
'cdmia' => 'application/cdmi-capability',
-
'cdmic' => 'application/cdmi-container',
-
'cdmid' => 'application/cdmi-domain',
-
'cdmio' => 'application/cdmi-object',
-
'cdmiq' => 'application/cdmi-queue',
-
'cdr' => 'application/vnd.corel-draw',
-
'cdx' => 'chemical/x-cdx',
-
'cdxml' => 'application/vnd.chemdraw+xml',
-
'cdy' => 'application/vnd.cinderella',
-
'cer' => 'application/pkix-cert',
-
'cert' => 'application/x-x509-ca-cert',
-
'cfs' => 'application/x-cfs-compressed',
-
'cgm' => 'image/cgm',
-
'chat' => 'application/x-chat',
-
'chm' => 'application/vnd.ms-htmlhelp',
-
'chrt' => 'application/vnd.kde.kchart',
-
'cif' => 'chemical/x-cif',
-
'cii' => 'application/vnd.anser-web-certificate-issue-initiation',
-
'cil' => 'application/vnd.ms-artgalry',
-
'cla' => 'application/vnd.claymore',
-
'class' => 'application/java-vm',
-
'clkk' => 'application/vnd.crick.clicker.keyboard',
-
'clkp' => 'application/vnd.crick.clicker.palette',
-
'clkt' => 'application/vnd.crick.clicker.template',
-
'clkw' => 'application/vnd.crick.clicker.wordbank',
-
'clkx' => 'application/vnd.crick.clicker',
-
'clp' => 'application/x-msclip',
-
'clpi' => 'video/mp2t',
-
'cls' => 'text/x-tex',
-
'cmake' => 'text/x-cmake',
-
'cmc' => 'application/vnd.cosmocaller',
-
'cmdf' => 'chemical/x-cmdf',
-
'cml' => 'chemical/x-cml',
-
'cmp' => 'application/vnd.yellowriver-custom-menu',
-
'cmx' => 'image/x-cmx',
-
'cob' => 'text/x-cobol',
-
'cod' => 'application/vnd.rim.cod',
-
'com' => 'application/x-msdownload',
-
'conf' => 'text/plain',
-
'cpi' => 'video/mp2t',
-
'cpio' => 'application/x-cpio',
-
'cpio.gz' => 'application/x-cpio-compressed',
-
'cpp' => 'text/x-c',
-
'cpt' => 'application/mac-compactpro',
-
'cr2' => 'image/x-canon-cr2',
-
'crd' => 'application/x-mscardfile',
-
'crl' => 'application/pkix-crl',
-
'crt' => 'application/x-x509-ca-cert',
-
'crw' => 'image/x-canon-crw',
-
'cryptonote' => 'application/vnd.rig.cryptonote',
-
'cs' => 'text/x-csharp',
-
'csh' => 'application/x-csh',
-
'csml' => 'chemical/x-csml',
-
'csp' => 'application/vnd.commonspace',
-
'css' => 'text/css',
-
'cst' => 'application/x-director',
-
'csv' => 'text/csv',
-
'cu' => 'application/cu-seeme',
-
'cue' => 'application/x-cue',
-
'cur' => 'image/x-win-bitmap',
-
'curl' => 'text/vnd.curl',
-
'cww' => 'application/prs.cww',
-
'cxt' => 'application/x-director',
-
'cxx' => 'text/x-c',
-
'd' => 'text/x-dsrc',
-
'dae' => 'model/vnd.collada+xml',
-
'daf' => 'application/vnd.mobius.daf',
-
'dar' => 'application/x-dar',
-
'dart' => 'application/vnd.dart',
-
'dataless' => 'application/vnd.fdsn.seed',
-
'davmount' => 'application/davmount+xml',
-
'dbf' => 'application/x-dbf',
-
'dbk' => 'application/docbook+xml',
-
'dc' => 'application/x-dc-rom',
-
'dcl' => 'text/x-dcl',
-
'dcm' => 'application/dicom',
-
'dcr' => 'application/x-director',
-
'dcurl' => 'text/vnd.curl.dcurl',
-
'dd2' => 'application/vnd.oma.dd2+xml',
-
'ddd' => 'application/vnd.fujixerox.ddd',
-
'dds' => 'image/x-dds',
-
'deb' => 'application/x-debian-package',
-
'def' => 'text/plain',
-
'deploy' => 'application/octet-stream',
-
'der' => 'application/x-x509-ca-cert',
-
'desktop' => 'application/x-desktop',
-
'dfac' => 'application/vnd.dreamfactory',
-
'dgc' => 'application/x-dgc-compressed',
-
'di' => 'text/x-dsrc',
-
'dia' => 'application/x-dia-diagram',
-
'dic' => 'text/x-c',
-
'diff' => 'text/diff',
-
'dir' => 'application/x-director',
-
'dis' => 'application/vnd.mobius.dis',
-
'dist' => 'application/octet-stream',
-
'distz' => 'application/octet-stream',
-
'divx' => 'video/x-msvideo',
-
'djv' => 'image/vnd.djvu',
-
'djvu' => 'image/vnd.djvu',
-
'dll' => 'application/x-msdownload',
-
'dmg' => 'application/x-apple-diskimage',
-
'dmp' => 'application/vnd.tcpdump.pcap',
-
'dms' => 'application/octet-stream',
-
'dna' => 'application/vnd.dna',
-
'dng' => 'image/x-adobe-dng',
-
'doc' => 'application/msword',
-
'docbook' => 'application/x-docbook+xml',
-
'docm' => 'application/vnd.ms-word.document.macroenabled.12',
-
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
-
'dot' => 'application/msword',
-
'dotm' => 'application/vnd.ms-word.template.macroenabled.12',
-
'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
-
'dp' => 'application/vnd.osgi.dp',
-
'dpg' => 'application/vnd.dpgraph',
-
'dra' => 'audio/vnd.dra',
-
'dsc' => 'text/prs.lines.tag',
-
'dsl' => 'text/x-dsl',
-
'dssc' => 'application/dssc+der',
-
'dtb' => 'application/x-dtbook+xml',
-
'dtd' => 'application/xml-dtd',
-
'dts' => 'audio/vnd.dts',
-
'dtshd' => 'audio/vnd.dts.hd',
-
'dtx' => 'text/x-tex',
-
'dump' => 'application/octet-stream',
-
'dv' => 'video/dv',
-
'dvb' => 'video/vnd.dvb.file',
-
'dvi' => 'application/x-dvi',
-
'dvi.bz2' => 'application/x-bzdvi',
-
'dvi.gz' => 'application/x-gzdvi',
-
'dwf' => 'model/vnd.dwf',
-
'dwg' => 'image/vnd.dwg',
-
'dxf' => 'image/vnd.dxf',
-
'dxp' => 'application/vnd.spotfire.dxp',
-
'dxr' => 'application/x-director',
-
'e' => 'text/x-eiffel',
-
'ecelp4800' => 'audio/vnd.nuera.ecelp4800',
-
'ecelp7470' => 'audio/vnd.nuera.ecelp7470',
-
'ecelp9600' => 'audio/vnd.nuera.ecelp9600',
-
'ecma' => 'application/ecmascript',
-
'edm' => 'application/vnd.novadigm.edm',
-
'edx' => 'application/vnd.novadigm.edx',
-
'efif' => 'application/vnd.picsel',
-
'egon' => 'application/x-egon',
-
'ei6' => 'application/vnd.pg.osasli',
-
'eif' => 'text/x-eiffel',
-
'el' => 'text/x-emacs-lisp',
-
'elc' => 'application/octet-stream',
-
'emf' => 'application/x-msmetafile',
-
'eml' => 'message/rfc822',
-
'emma' => 'application/emma+xml',
-
'emp' => 'application/vnd.emusic-emusic_package',
-
'emz' => 'application/x-msmetafile',
-
'ent' => 'application/xml-external-parsed-entity',
-
'eol' => 'audio/vnd.digital-winds',
-
'eot' => 'application/vnd.ms-fontobject',
-
'eps' => 'application/postscript',
-
'eps.bz2' => 'image/x-bzeps',
-
'eps.gz' => 'image/x-gzeps',
-
'epsf' => 'image/x-eps',
-
'epsf.bz2' => 'image/x-bzeps',
-
'epsf.gz' => 'image/x-gzeps',
-
'epsi' => 'image/x-eps',
-
'epsi.bz2' => 'image/x-bzeps',
-
'epsi.gz' => 'image/x-gzeps',
-
'epub' => 'application/epub+zip',
-
'erl' => 'text/x-erlang',
-
'es' => 'application/ecmascript',
-
'es3' => 'application/vnd.eszigno3+xml',
-
'esa' => 'application/vnd.osgi.subsystem',
-
'esf' => 'application/vnd.epson.esf',
-
'et3' => 'application/vnd.eszigno3+xml',
-
'etheme' => 'application/x-e-theme',
-
'etx' => 'text/x-setext',
-
'eva' => 'application/x-eva',
-
'evy' => 'application/x-envoy',
-
'exe' => 'application/x-msdownload',
-
'exi' => 'application/exi',
-
'exr' => 'image/x-exr',
-
'ext' => 'application/vnd.novadigm.ext',
-
'ez' => 'application/andrew-inset',
-
'ez2' => 'application/vnd.ezpix-album',
-
'ez3' => 'application/vnd.ezpix-package',
-
'f' => 'text/x-fortran',
-
'f4a' => 'audio/mp4',
-
'f4b' => 'audio/x-m4b',
-
'f4v' => 'video/x-f4v',
-
'f77' => 'text/x-fortran',
-
'f90' => 'text/x-fortran',
-
'f95' => 'text/x-fortran',
-
'fb2' => 'application/x-fictionbook+xml',
-
'fb2.zip' => 'application/x-zip-compressed-fb2',
-
'fbs' => 'image/vnd.fastbidsheet',
-
'fcdt' => 'application/vnd.adobe.formscentral.fcdt',
-
'fcs' => 'application/vnd.isac.fcs',
-
'fdf' => 'application/vnd.fdf',
-
'fe_launch' => 'application/vnd.denovo.fcselayout-link',
-
'fg5' => 'application/vnd.fujitsu.oasysgp',
-
'fgd' => 'application/x-director',
-
'fh' => 'image/x-freehand',
-
'fh4' => 'image/x-freehand',
-
'fh5' => 'image/x-freehand',
-
'fh7' => 'image/x-freehand',
-
'fhc' => 'image/x-freehand',
-
'fig' => 'application/x-xfig',
-
'fits' => 'image/fits',
-
'fl' => 'application/x-fluid',
-
'flac' => 'audio/x-flac',
-
'flc' => 'video/x-flic',
-
'fli' => 'video/x-fli',
-
'flo' => 'application/vnd.micrografx.flo',
-
'flv' => 'video/x-flv',
-
'flw' => 'application/vnd.kde.kivio',
-
'flx' => 'text/vnd.fmi.flexstor',
-
'fly' => 'text/vnd.fly',
-
'fm' => 'application/vnd.framemaker',
-
'fnc' => 'application/vnd.frogans.fnc',
-
'fo' => 'text/x-xslfo',
-
'fodg' => 'application/vnd.oasis.opendocument.graphics-flat-xml',
-
'fodp' => 'application/vnd.oasis.opendocument.presentation-flat-xml',
-
'fods' => 'application/vnd.oasis.opendocument.spreadsheet-flat-xml',
-
'fodt' => 'application/vnd.oasis.opendocument.text-flat-xml',
-
'for' => 'text/x-fortran',
-
'fpx' => 'image/vnd.fpx',
-
'frame' => 'application/vnd.framemaker',
-
'fsc' => 'application/vnd.fsc.weblaunch',
-
'fst' => 'image/vnd.fst',
-
'ftc' => 'application/vnd.fluxtime.clip',
-
'fti' => 'application/vnd.anser-web-funds-transfer-initiation',
-
'fvt' => 'video/vnd.fvt',
-
'fxm' => 'video/x-javafx',
-
'fxp' => 'application/vnd.adobe.fxp',
-
'fxpl' => 'application/vnd.adobe.fxp',
-
'fzs' => 'application/vnd.fuzzysheet',
-
'g2w' => 'application/vnd.geoplan',
-
'g3' => 'image/g3fax',
-
'g3w' => 'application/vnd.geospace',
-
'gac' => 'application/vnd.groove-account',
-
'gam' => 'application/x-tads',
-
'gb' => 'application/x-gameboy-rom',
-
'gba' => 'application/x-gba-rom',
-
'gbr' => 'application/rpki-ghostbusters',
-
'gca' => 'application/x-gca-compressed',
-
'gcrd' => 'text/vcard',
-
'gdl' => 'model/vnd.gdl',
-
'ged' => 'application/x-gedcom',
-
'gedcom' => 'application/x-gedcom',
-
'gem' => 'application/x-tar',
-
'gen' => 'application/x-genesis-rom',
-
'geo' => 'application/vnd.dynageo',
-
'gex' => 'application/vnd.geometry-explorer',
-
'gf' => 'application/x-tex-gf',
-
'gg' => 'application/x-sms-rom',
-
'ggb' => 'application/vnd.geogebra.file',
-
'ggt' => 'application/vnd.geogebra.tool',
-
'ghf' => 'application/vnd.groove-help',
-
'gif' => 'image/gif',
-
'gim' => 'application/vnd.groove-identity-message',
-
'glade' => 'application/x-glade',
-
'gml' => 'application/gml+xml',
-
'gmo' => 'application/x-gettext-translation',
-
'gmx' => 'application/vnd.gmx',
-
'gnc' => 'application/x-gnucash',
-
'gnd' => 'application/gnunet-directory',
-
'gnucash' => 'application/x-gnucash',
-
'gnumeric' => 'application/x-gnumeric',
-
'gnuplot' => 'application/x-gnuplot',
-
'go' => 'text/x-go',
-
'gp' => 'application/x-gnuplot',
-
'gpg' => 'application/pgp-encrypted',
-
'gph' => 'application/vnd.flographit',
-
'gplt' => 'application/x-gnuplot',
-
'gpx' => 'application/gpx+xml',
-
'gqf' => 'application/vnd.grafeq',
-
'gqs' => 'application/vnd.grafeq',
-
'gra' => 'application/x-graphite',
-
'gram' => 'application/srgs',
-
'gramps' => 'application/x-gramps-xml',
-
'gre' => 'application/vnd.geometry-explorer',
-
'grv' => 'application/vnd.groove-injector',
-
'grxml' => 'application/srgs+xml',
-
'gsf' => 'application/x-font-ghostscript',
-
'gsm' => 'audio/x-gsm',
-
'gtar' => 'application/x-gtar',
-
'gtm' => 'application/vnd.groove-tool-message',
-
'gtw' => 'model/vnd.gtw',
-
'gv' => 'text/vnd.graphviz',
-
'gvp' => 'text/x-google-video-pointer',
-
'gxf' => 'application/gxf',
-
'gxt' => 'application/vnd.geonext',
-
'gz' => 'application/x-gzip',
-
'h' => 'text/x-c',
-
'h++' => 'text/x-c++hdr',
-
'h261' => 'video/h261',
-
'h263' => 'video/h263',
-
'h264' => 'video/h264',
-
'h4' => 'application/x-hdf',
-
'h5' => 'application/x-hdf',
-
'hal' => 'application/vnd.hal+xml',
-
'hbci' => 'application/vnd.hbci',
-
'hdf' => 'application/x-hdf',
-
'hdf4' => 'application/x-hdf',
-
'hdf5' => 'application/x-hdf',
-
'hh' => 'text/x-c',
-
'hlp' => 'application/winhlp',
-
'hp' => 'text/x-c++hdr',
-
'hpgl' => 'application/vnd.hp-hpgl',
-
'hpid' => 'application/vnd.hp-hpid',
-
'hpp' => 'text/x-c++hdr',
-
'hps' => 'application/vnd.hp-hps',
-
'hqx' => 'application/mac-binhex40',
-
'hs' => 'text/x-haskell',
-
'htke' => 'application/vnd.kenameaapp',
-
'htm' => 'text/html',
-
'html' => 'text/html',
-
'hvd' => 'application/vnd.yamaha.hv-dic',
-
'hvp' => 'application/vnd.yamaha.hv-voice',
-
'hvs' => 'application/vnd.yamaha.hv-script',
-
'hwp' => 'application/x-hwp',
-
'hwt' => 'application/x-hwt',
-
'hxx' => 'text/x-c++hdr',
-
'i2g' => 'application/vnd.intergeo',
-
'ica' => 'application/x-ica',
-
'icb' => 'image/x-tga',
-
'icc' => 'application/vnd.iccprofile',
-
'ice' => 'x-conference/x-cooltalk',
-
'icm' => 'application/vnd.iccprofile',
-
'icns' => 'image/x-icns',
-
'ico' => 'image/x-icon',
-
'ics' => 'text/calendar',
-
'idl' => 'text/x-idl',
-
'ief' => 'image/ief',
-
'ifb' => 'text/calendar',
-
'iff' => 'image/x-ilbm',
-
'ifm' => 'application/vnd.shana.informed.formdata',
-
'iges' => 'model/iges',
-
'igl' => 'application/vnd.igloader',
-
'igm' => 'application/vnd.insors.igm',
-
'igs' => 'model/iges',
-
'igx' => 'application/vnd.micrografx.igx',
-
'iif' => 'application/vnd.shana.informed.interchange',
-
'ilbm' => 'image/x-ilbm',
-
'ime' => 'text/x-iMelody',
-
'img' => 'application/x-raw-disk-image',
-
'img.xz' => 'application/x-raw-disk-image-xz-compressed',
-
'imp' => 'application/vnd.accpac.simply.imp',
-
'ims' => 'application/vnd.ms-ims',
-
'imy' => 'text/x-iMelody',
-
'in' => 'text/plain',
-
'ink' => 'application/inkml+xml',
-
'inkml' => 'application/inkml+xml',
-
'ins' => 'text/x-tex',
-
'install' => 'application/x-install-instructions',
-
'iota' => 'application/vnd.astraea-software.iota',
-
'ipfix' => 'application/ipfix',
-
'ipk' => 'application/vnd.shana.informed.package',
-
'iptables' => 'text/x-iptables',
-
'irm' => 'application/vnd.ibm.rights-management',
-
'irp' => 'application/vnd.irepository.package+xml',
-
'iso' => 'application/x-iso9660-image',
-
'iso9660' => 'application/x-cd-image',
-
'it' => 'audio/x-it',
-
'it87' => 'application/x-it87',
-
'itp' => 'application/vnd.shana.informed.formtemplate',
-
'ivp' => 'application/vnd.immervision-ivp',
-
'ivu' => 'application/vnd.immervision-ivu',
-
'jad' => 'text/vnd.sun.j2me.app-descriptor',
-
'jam' => 'application/vnd.jam',
-
'jar' => 'application/java-archive',
-
'java' => 'text/x-java-source',
-
'jceks' => 'application/x-java-jce-keystore',
-
'jisp' => 'application/vnd.jisp',
-
'jks' => 'application/x-java-keystore',
-
'jlt' => 'application/vnd.hp-jlyt',
-
'jng' => 'image/x-jng',
-
'jnlp' => 'application/x-java-jnlp-file',
-
'joda' => 'application/vnd.joost.joda-archive',
-
'jp2' => 'image/jp2',
-
'jpg' => 'image/jpeg',
-
'jpeg' => 'image/jpeg',
-
'jpf' => 'image/jp2',
-
'jpe' => 'image/jpeg',
-
'jpgm' => 'video/jpm',
-
'jpgv' => 'video/jpeg',
-
'jpm' => 'video/jpm',
-
'jpr' => 'application/x-jbuilder-project',
-
'jpx' => 'application/x-jbuilder-project',
-
'js' => 'application/javascript',
-
'jsm' => 'application/javascript',
-
'json' => 'application/json',
-
'jsonml' => 'application/jsonml+json',
-
'k25' => 'image/x-kodak-k25',
-
'kar' => 'audio/midi',
-
'karbon' => 'application/vnd.kde.karbon',
-
'kdc' => 'image/x-kodak-kdc',
-
'kdelnk' => 'application/x-desktop',
-
'kexi' => 'application/x-kexiproject-sqlite2',
-
'kexic' => 'application/x-kexi-connectiondata',
-
'kexis' => 'application/x-kexiproject-shortcut',
-
'key' => 'application/x-iwork-keynote-sffkey',
-
'kfo' => 'application/vnd.kde.kformula',
-
'kia' => 'application/vnd.kidspiration',
-
'kil' => 'application/x-killustrator',
-
'kino' => 'application/smil',
-
'kml' => 'application/vnd.google-earth.kml+xml',
-
'kmz' => 'application/vnd.google-earth.kmz',
-
'kne' => 'application/vnd.kinar',
-
'knp' => 'application/vnd.kinar',
-
'kon' => 'application/vnd.kde.kontour',
-
'kpm' => 'application/x-kpovmodeler',
-
'kpr' => 'application/vnd.kde.kpresenter',
-
'kpt' => 'application/vnd.kde.kpresenter',
-
'kpxx' => 'application/vnd.ds-keypoint',
-
'kra' => 'application/x-krita',
-
'ks' => 'application/x-java-keystore',
-
'ksp' => 'application/vnd.kde.kspread',
-
'ktr' => 'application/vnd.kahootz',
-
'ktx' => 'image/ktx',
-
'ktz' => 'application/vnd.kahootz',
-
'kud' => 'application/x-kugar',
-
'kwd' => 'application/vnd.kde.kword',
-
'kwt' => 'application/vnd.kde.kword',
-
'la' => 'application/x-shared-library-la',
-
'lasxml' => 'application/vnd.las.las+xml',
-
'latex' => 'application/x-latex',
-
'lbd' => 'application/vnd.llamagraphics.life-balance.desktop',
-
'lbe' => 'application/vnd.llamagraphics.life-balance.exchange+xml',
-
'lbm' => 'image/x-ilbm',
-
'ldif' => 'text/x-ldif',
-
'les' => 'application/vnd.hhe.lesson-player',
-
'lha' => 'application/x-lzh-compressed',
-
'lhs' => 'text/x-literate-haskell',
-
'lhz' => 'application/x-lhz',
-
'link66' => 'application/vnd.route66.link66+xml',
-
'list' => 'text/plain',
-
'list3820' => 'application/vnd.ibm.modcap',
-
'listafp' => 'application/vnd.ibm.modcap',
-
'lnk' => 'application/x-ms-shortcut',
-
'log' => 'text/plain',
-
'lostxml' => 'application/lost+xml',
-
'lrf' => 'application/octet-stream',
-
'lrm' => 'application/vnd.ms-lrm',
-
'lrz' => 'application/x-lrzip',
-
'ltf' => 'application/vnd.frogans.ltf',
-
'ltx' => 'text/x-tex',
-
'lua' => 'text/x-lua',
-
'lvp' => 'audio/vnd.lucent.voice',
-
'lwo' => 'image/x-lwo',
-
'lwob' => 'image/x-lwo',
-
'lwp' => 'application/vnd.lotus-wordpro',
-
'lws' => 'image/x-lws',
-
'ly' => 'text/x-lilypond',
-
'lyx' => 'application/x-lyx',
-
'lz' => 'application/x-lzip',
-
'lz4' => 'application/x-lz4',
-
'lzh' => 'application/x-lzh-compressed',
-
'lzma' => 'application/x-lzma',
-
'lzo' => 'application/x-lzop',
-
'm' => 'text/x-objcsrc',
-
'm13' => 'application/x-msmediaview',
-
'm14' => 'application/x-msmediaview',
-
'm15' => 'audio/x-mod',
-
'm1u' => 'video/vnd.mpegurl',
-
'm1v' => 'video/mpeg',
-
'm21' => 'application/mp21',
-
'm2a' => 'audio/mpeg',
-
'm2t' => 'video/mp2t',
-
'm2ts' => 'video/mp2t',
-
'm2v' => 'video/mpeg',
-
'm3a' => 'audio/mpeg',
-
'm3u' => 'audio/x-mpegurl',
-
'm3u8' => 'application/vnd.apple.mpegurl',
-
'm4' => 'application/x-m4',
-
'm4a' => 'audio/mp4',
-
'm4b' => 'audio/x-m4b',
-
'm4u' => 'video/vnd.mpegurl',
-
'm4v' => 'video/x-m4v',
-
'ma' => 'application/mathematica',
-
'mab' => 'application/x-markaby',
-
'mads' => 'application/mads+xml',
-
'mag' => 'application/vnd.ecowin.chart',
-
'mak' => 'text/x-makefile',
-
'maker' => 'application/vnd.framemaker',
-
'man' => 'text/troff',
-
'manifest' => 'text/cache-manifest',
-
'mar' => 'application/octet-stream',
-
'markdown' => 'text/x-markdown',
-
'mathml' => 'application/mathml+xml',
-
'mb' => 'application/mathematica',
-
'mbk' => 'application/vnd.mobius.mbk',
-
'mbox' => 'application/mbox',
-
'mc1' => 'application/vnd.medcalcdata',
-
'mcd' => 'application/vnd.mcd',
-
'mcurl' => 'text/vnd.curl.mcurl',
-
'md' => 'text/x-markdown',
-
'mdb' => 'application/x-msaccess',
-
'mdi' => 'image/vnd.ms-modi',
-
'me' => 'text/troff',
-
'med' => 'audio/x-mod',
-
'mesh' => 'model/mesh',
-
'meta4' => 'application/metalink4+xml',
-
'metalink' => 'application/metalink+xml',
-
'mets' => 'application/mets+xml',