diff options
Diffstat (limited to 'includes/libs/mime/MimeMap.php')
-rw-r--r-- | includes/libs/mime/MimeMap.php | 502 |
1 files changed, 502 insertions, 0 deletions
diff --git a/includes/libs/mime/MimeMap.php b/includes/libs/mime/MimeMap.php new file mode 100644 index 000000000000..303d18d61aa7 --- /dev/null +++ b/includes/libs/mime/MimeMap.php @@ -0,0 +1,502 @@ +<?php +/** + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * http://www.gnu.org/copyleft/gpl.html + * + * @file + */ + +namespace Wikimedia\Mime; + +/** + * MimeMap defines the mapping of MIME types to file extensions and media + * types. + * + * @internal + */ +class MimeMap { + /** @var array Map of MIME types to a string of space-separated file extensions */ + public const MIME_EXTENSIONS = [ + 'application/ogg' => 'ogx ogg ogm ogv oga spx opus', + 'application/pdf' => 'pdf', + 'application/vnd.oasis.opendocument.chart' => 'odc', + 'application/vnd.oasis.opendocument.chart-template' => 'otc', + 'application/vnd.oasis.opendocument.database' => 'odb', + 'application/vnd.oasis.opendocument.formula' => 'odf', + 'application/vnd.oasis.opendocument.formula-template' => 'otf', + 'application/vnd.oasis.opendocument.graphics' => 'odg', + 'application/vnd.oasis.opendocument.graphics-template' => 'otg', + 'application/vnd.oasis.opendocument.image' => 'odi', + 'application/vnd.oasis.opendocument.image-template' => 'oti', + 'application/vnd.oasis.opendocument.presentation' => 'odp', + 'application/vnd.oasis.opendocument.presentation-template' => 'otp', + 'application/vnd.oasis.opendocument.spreadsheet' => 'ods', + 'application/vnd.oasis.opendocument.spreadsheet-template' => 'ots', + 'application/vnd.oasis.opendocument.text' => 'odt', + 'application/vnd.oasis.opendocument.text-master' => 'otm odm', + 'application/vnd.oasis.opendocument.text-template' => 'ott', + 'application/vnd.oasis.opendocument.text-web' => 'oth', + 'application/javascript' => 'js', + 'application/x-shockwave-flash' => 'swf', + 'audio/midi' => 'mid midi kar', + 'audio/mpeg' => 'mpga mpa mp2 mp3', + 'audio/x-aiff' => 'aif aiff aifc', + 'audio/x-wav' => 'wav', + 'audio/ogg' => 'oga spx ogg opus', + 'audio/opus' => 'opus ogg oga spx', + 'image/x-bmp' => 'bmp', + 'image/gif' => 'gif', + 'image/jpeg' => 'jpeg jpg jpe', + 'image/png' => 'png apng', + 'image/svg+xml' => 'svg', + 'image/svg' => 'svg', + 'image/tiff' => 'tiff tif', + 'image/vnd.djvu' => 'djvu djv', + 'image/x.djvu' => 'djvu', + 'image/x-djvu' => 'djvu', + 'image/x-portable-pixmap' => 'ppm', + 'image/x-xcf' => 'xcf', + 'text/plain' => 'txt', + 'text/html' => 'html htm', + 'video/ogg' => 'ogv ogm ogg', + 'video/mpeg' => 'mpg mpeg mpe', + 'application/acad' => 'dwg', + 'application/andrew-inset' => 'ez', + 'application/mac-binhex40' => 'hqx', + 'application/mac-compactpro' => 'cpt', + 'application/mathml+xml' => 'mathml', + 'application/msword' => 'doc dot', + 'application/octet-stream' => 'bin dms lha lzh exe class so dll', + 'application/oda' => 'oda', + 'application/postscript' => 'ai eps ps', + 'application/rdf+xml' => 'rdf', + 'application/smil' => 'smi smil', + 'application/srgs' => 'gram', + 'application/srgs+xml' => 'grxml', + 'application/vnd.mif' => 'mif', + 'application/vnd.ms-excel' => 'xls xlt xla', + 'application/vnd.ms-powerpoint' => 'ppt pot pps ppa', + 'application/vnd.wap.wbxml' => 'wbxml', + 'application/vnd.wap.wmlc' => 'wmlc', + 'application/vnd.wap.wmlscriptc' => 'wmlsc', + 'application/voicexml+xml' => 'vxml', + 'application/x-7z-compressed' => '7z', + 'application/x-bcpio' => 'bcpio', + 'application/x-bzip' => 'bz', + 'application/x-bzip2' => 'bz2', + 'application/x-cdlink' => 'vcd', + 'application/x-chess-pgn' => 'pgn', + 'application/x-cpio' => 'cpio', + 'application/x-csh' => 'csh', + 'application/x-dia-diagram' => 'dia', + 'application/x-director' => 'dcr dir dxr', + 'application/x-dvi' => 'dvi', + 'application/x-futuresplash' => 'spl', + 'application/x-gtar' => 'gtar tar', + 'application/x-gzip' => 'gz', + 'application/x-hdf' => 'hdf', + 'application/x-jar' => 'jar', + 'application/json' => 'json', + 'application/x-koan' => 'skp skd skt skm', + 'application/x-latex' => 'latex', + 'application/x-netcdf' => 'nc cdf', + 'application/x-sh' => 'sh', + 'application/x-shar' => 'shar', + 'application/x-stuffit' => 'sit', + 'application/x-sv4cpio' => 'sv4cpio', + 'application/x-sv4crc' => 'sv4crc', + 'application/x-tar' => 'tar', + 'application/x-tcl' => 'tcl', + 'application/x-tex' => 'tex', + 'application/x-texinfo' => 'texinfo texi', + 'application/x-troff' => 't tr roff', + 'application/x-troff-man' => 'man', + 'application/x-troff-me' => 'me', + 'application/x-troff-ms' => 'ms', + 'application/x-ustar' => 'ustar', + 'application/x-wais-source' => 'src', + 'application/x-xpinstall' => 'xpi', + 'application/xhtml+xml' => 'xhtml xht', + 'application/xslt+xml' => 'xslt', + 'application/xml' => 'xml xsl xsd kml', + 'application/xml-dtd' => 'dtd', + 'application/zip' => 'zip jar xpi sxc stc sxd std sxi sti sxm stm sxw stw', + 'application/x-rar' => 'rar', + 'application/font-woff' => 'woff', + 'application/font-woff2' => 'woff2', + 'application/vnd.ms-fontobject' => 'eot', + 'application/x-font-ttf' => 'ttf', + 'audio/basic' => 'au snd', + 'video/webm' => 'webm', + 'audio/webm' => 'webm', + 'audio/x-matroska' => 'mka mkv', + 'audio/x-mpegurl' => 'm3u', + 'audio/x-ogg' => 'oga ogg spx opus', + 'audio/x-pn-realaudio' => 'ram rm', + 'audio/x-pn-realaudio-plugin' => 'rpm', + 'audio/x-realaudio' => 'ra', + 'audio/wav' => 'wav', + 'audio/x-flac' => 'flac', + 'audio/flac' => 'flac', + 'chemical/x-pdb' => 'pdb', + 'chemical/x-xyz' => 'xyz', + 'image/bmp' => 'bmp', + 'image/cgm' => 'cgm', + 'image/ief' => 'ief', + 'image/jp2' => 'j2k jp2 jpg2', + 'image/vnd.microsoft.icon' => 'ico', + 'image/vnd.wap.wbmp' => 'wbmp', + 'image/webp' => 'webp', + 'image/x-cmu-raster' => 'ras', + 'image/x-icon' => 'ico', + 'image/x-ms-bmp' => 'bmp', + 'image/x-portable-anymap' => 'pnm', + 'image/x-portable-bitmap' => 'pbm', + 'image/x-portable-graymap' => 'pgm', + 'image/x-rgb' => 'rgb', + 'image/x-photoshop' => 'psd', + 'image/x-xbitmap' => 'xbm', + 'image/x-xpixmap' => 'xpm', + 'image/x-xwindowdump' => 'xwd', + 'model/iges' => 'igs iges', + 'model/mesh' => 'msh mesh silo', + 'model/vrml' => 'wrl vrml', + 'text/calendar' => 'ics ifb', + 'text/css' => 'css', + 'text/csv' => 'csv', + 'text/richtext' => 'rtx', + 'text/rtf' => 'rtf', + 'text/sgml' => 'sgml sgm', + 'text/tab-separated-values' => 'tsv', + 'text/vnd.wap.wml' => 'wml', + 'text/vnd.wap.wmlscript' => 'wmls', + 'text/xml' => 'xml xsl xslt rss rdf', + 'text/x-component' => 'htc', + 'text/x-setext' => 'etx', + 'text/x-sawfish' => 'jl', + 'video/mp4' => 'mp4 m4a m4p m4b m4r m4v', + 'audio/mp4' => 'm4a', + 'video/quicktime' => 'qt mov', + 'video/vnd.mpegurl' => 'mxu', + 'video/x-flv' => 'flv', + 'video/x-matroska' => 'mkv mka', + 'video/x-msvideo' => 'avi', + 'video/x-ogg' => 'ogv ogm ogg', + 'video/x-sgi-movie' => 'movie', + 'x-conference/x-cooltalk' => 'ice', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'docx', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.template' => 'dotx', + 'application/vnd.ms-word.document.macroenabled.12' => 'docm', + 'application/vnd.ms-word.template.macroenabled.12' => 'dotm', + 'application/vnd.openxmlformats-officedocument.presentationml.template' => 'potx', + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow' => 'ppsx', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'pptx', + 'application/vnd.ms-powerpoint.addin.macroenabled.12' => 'ppam', + 'application/vnd.ms-powerpoint.presentation.macroenabled.12' => 'pptm potm', + 'application/vnd.ms-powerpoint.slideshow.macroenabled.12' => 'ppsm', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'xlsx', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.template' => 'xltx', + 'application/vnd.ms-excel.sheet.macroenabled.12' => 'xlsm', + 'application/vnd.ms-excel.template.macroenabled.12' => 'xltm', + 'application/vnd.ms-excel.addin.macroenabled.12' => 'xlam', + 'application/vnd.ms-excel.sheet.binary.macroenabled.12' => 'xlsb', + 'model/vnd.dwfx+xps' => 'dwfx', + 'application/vnd.ms-xpsdocument' => 'xps', + 'application/x-opc+zip' => + 'docx dotx docm dotm potx ppsx pptx ppam pptm potm ppsm xlsx xltx xlsm xltm xlam xlsb dwfx xps', + 'chemical/x-mdl-molfile' => 'mol', + 'chemical/x-mdl-sdfile' => 'sdf', + 'chemical/x-mdl-rxnfile' => 'rxn', + 'chemical/x-mdl-rdfile' => 'rd', + 'chemical/x-mdl-rgfile' => 'rg', + 'application/x-amf' => 'amf', + 'application/sla' => 'stl', + 'application/wasm' => 'wasm', + ]; + + /** @var array Map of built-in media types and their associated MIME types */ + public const MEDIA_TYPES = [ + MEDIATYPE_OFFICE => [ + 'application/pdf', + 'application/vnd.oasis.opendocument.chart', + 'application/vnd.oasis.opendocument.chart-template', + 'application/vnd.oasis.opendocument.database', + 'application/vnd.oasis.opendocument.formula', + 'application/vnd.oasis.opendocument.formula-template', + 'application/vnd.oasis.opendocument.graphics', + 'application/vnd.oasis.opendocument.graphics-template', + 'application/vnd.oasis.opendocument.image', + 'application/vnd.oasis.opendocument.image-template', + 'application/vnd.oasis.opendocument.presentation', + 'application/vnd.oasis.opendocument.presentation-template', + 'application/vnd.oasis.opendocument.spreadsheet', + 'application/vnd.oasis.opendocument.spreadsheet-template', + 'application/vnd.oasis.opendocument.text', + 'application/vnd.oasis.opendocument.text-template', + 'application/vnd.oasis.opendocument.text-master', + 'application/vnd.oasis.opendocument.text-web', + 'application/pdf', + 'application/acrobat', + 'application/msword', + 'application/vnd.ms-excel', + 'application/vnd.ms-powerpoint', + 'application/x-director', + 'image/vnd.djvu', + 'image/x.djvu', + 'image/x-djvu', + 'text/rtf', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.document', + 'application/vnd.openxmlformats-officedocument.wordprocessingml.template', + 'application/vnd.ms-word.document.macroenabled.12', + 'application/vnd.ms-word.template.macroenabled.12', + 'application/vnd.openxmlformats-officedocument.presentationml.template', + 'application/vnd.openxmlformats-officedocument.presentationml.slideshow', + 'application/vnd.openxmlformats-officedocument.presentationml.presentation', + 'application/vnd.ms-powerpoint.addin.macroenabled.12', + 'application/vnd.ms-powerpoint.presentation.macroenabled.12', + 'application/vnd.ms-powerpoint.presentation.macroenabled.12', + 'application/vnd.ms-powerpoint.slideshow.macroenabled.12', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', + 'application/vnd.openxmlformats-officedocument.spreadsheetml.template', + 'application/vnd.ms-excel.sheet.macroenabled.12', + 'application/vnd.ms-excel.template.macroenabled.12', + 'application/vnd.ms-excel.addin.macroenabled.12', + 'application/vnd.ms-excel.sheet.binary.macroenabled.12', + ], + MEDIATYPE_EXECUTABLE => [ + 'application/javascript', + 'text/javascript', + 'application/x-javascript', + 'application/javascript', + 'text/javascript', + 'application/x-javascript', + 'application/x-ecmascript', + 'text/ecmascript', + 'application/x-bash', + 'application/x-sh', + 'application/x-csh', + 'application/x-tcsh', + 'application/x-tcl', + 'application/x-perl', + 'application/x-python', + 'application/wasm', + ], + MEDIATYPE_MULTIMEDIA => [ + 'application/x-shockwave-flash', + 'application/ogg', + 'audio/ogg', + 'video/ogg', + 'application/ogg', + 'application/x-ogg', + 'audio/ogg', + 'audio/x-ogg', + 'video/ogg', + 'video/x-ogg', + 'application/x-shockwave-flash', + 'audio/x-pn-realaudio-plugin', + 'model/iges', + 'model/mesh', + 'model/vrml', + 'video/quicktime', + 'video/x-msvideo', + ], + MEDIATYPE_AUDIO => [ + 'audio/midi', + 'audio/x-aiff', + 'audio/x-wav', + 'audio/mp3', + 'audio/mpeg', + 'audio/mpeg', + 'audio/mp3', + 'audio/mpeg3', + 'audio/mp4', + 'audio/wav', + 'audio/x-wav', + 'audio/wave', + 'audio/midi', + 'audio/mid', + 'audio/basic', + 'audio/ogg', + 'audio/opus', + 'audio/x-aiff', + 'audio/x-pn-realaudio', + 'audio/x-realaudio', + 'audio/webm', + 'audio/x-matroska', + 'audio/x-flac', + 'audio/flac', + ], + MEDIATYPE_BITMAP => [ + 'image/x-bmp', + 'image/x-ms-bmp', + 'image/bmp', + 'image/gif', + 'image/jpeg', + 'image/png', + 'image/tiff', + 'image/vnd.djvu', + 'image/x-xcf', + 'image/x-portable-pixmap', + 'image/gif', + 'image/png', + 'image/x-png', + 'image/ief', + 'image/jpeg', + 'image/pjpeg', + 'image/jp2', + 'image/xbm', + 'image/tiff', + 'image/x-icon', + 'image/x-ico', + 'image/vnd.microsoft.icon', + 'image/x-rgb', + 'image/x-portable-pixmap', + 'image/x-portable-graymap', + 'image/x-portable-greymap', + 'image/x-bmp', + 'image/x-ms-bmp', + 'image/bmp', + 'application/x-bmp', + 'application/bmp', + 'image/x-photoshop', + 'image/psd', + 'image/x-psd', + 'image/photoshop', + 'image/vnd.adobe.photoshop', + 'image/webp', + ], + MEDIATYPE_DRAWING => [ + 'image/svg+xml', + 'image/svg+xml', + 'application/svg+xml', + 'application/svg', + 'image/svg', + 'application/postscript', + 'application/x-latex', + 'application/x-tex', + 'application/x-dia-diagram', + 'application/acad', + 'application/x-acad', + 'application/autocad_dwg', + 'image/x-dwg', + 'application/dwg', + 'application/x-dwg', + 'application/x-autocad', + 'image/vnd.dwg', + 'drawing/dwg', + 'chemical/x-mdl-molfile', + 'chemical/x-mdl-sdfile', + 'chemical/x-mdl-rxnfile', + 'chemical/x-mdl-rdfile', + 'chemical/x-mdl-rgfile', + ], + MEDIATYPE_TEXT => [ + 'text/plain', + 'text/html', + 'text/plain', + 'text/html', + 'application/xhtml+xml', + 'application/xml', + 'text/xml', + 'text', + 'application/json', + 'text/csv', + 'text/tab-separated-values', + ], + MEDIATYPE_VIDEO => [ + 'video/ogg', + 'video/mpeg', + 'video/mpeg', + 'application/mpeg', + 'video/ogg', + 'video/x-sgi-video', + 'video/x-flv', + 'video/webm', + 'video/x-matroska', + 'video/mp4', + ], + MEDIATYPE_UNKNOWN => [ + 'unknown/unknown', + 'application/octet-stream', + 'application/x-empty', + ], + MEDIATYPE_ARCHIVE => [ + 'application/zip', + 'application/x-zip', + 'application/x-gzip', + 'application/x-bzip', + 'application/x-bzip2', + 'application/x-tar', + 'application/x-stuffit', + 'application/x-opc+zip', + 'application/x-7z-compressed', + ], + MEDIATYPE_3D => [ + 'application/sla', + ], + ]; + + /** @var array Map of variant MIME types to their canonical MIME type */ + public const MIME_TYPE_ALIASES = [ + 'text/javascript' => 'application/javascript', + 'application/x-javascript' => 'application/javascript', + 'audio/mpeg' => 'audio/mp3', + 'audio/ogg' => 'application/ogg', + 'video/ogg' => 'application/ogg', + 'image/x-ms-bmp' => 'image/x-bmp', + 'image/bmp' => 'image/x-bmp', + 'application/octet-stream' => 'unknown/unknown', + 'application/x-empty' => 'unknown/unknown', + 'image/x-png' => 'image/png', + 'image/pjpeg' => 'image/jpeg', + 'image/x-ico' => 'image/x-icon', + 'image/vnd.microsoft.icon' => 'image/x-icon', + 'image/x-portable-greymap' => 'image/x-portable-graymap', + 'application/x-bmp' => 'image/x-bmp', + 'application/bmp' => 'image/x-bmp', + 'image/psd' => 'image/x-photoshop', + 'image/x-psd' => 'image/x-photoshop', + 'image/photoshop' => 'image/x-photoshop', + 'image/vnd.adobe.photoshop' => 'image/x-photoshop', + 'application/svg+xml' => 'image/svg+xml', + 'application/svg' => 'image/svg+xml', + 'image/svg' => 'image/svg+xml', + 'audio/mp3' => 'audio/mpeg', + 'audio/mpeg3' => 'audio/mpeg', + 'audio/x-wav' => 'audio/wav', + 'audio/wave' => 'audio/wav', + 'audio/mid' => 'audio/midi', + 'application/mpeg' => 'video/mpeg', + 'application/x-ogg' => 'application/ogg', + 'audio/x-ogg' => 'application/ogg', + 'video/x-ogg' => 'application/ogg', + 'application/xhtml+xml' => 'text/html', + 'text/xml' => 'application/xml', + 'application/x-zip' => 'application/zip', + 'application/x-ecmascript' => 'application/javascript', + 'text/ecmascript' => 'application/javascript', + 'application/acrobat' => 'application/pdf', + 'image/x.djvu' => 'image/vnd.djvu', + 'image/x-djvu' => 'image/vnd.djvu', + 'application/x-acad' => 'application/acad', + 'application/autocad_dwg' => 'application/acad', + 'image/x-dwg' => 'application/acad', + 'application/dwg' => 'application/acad', + 'application/x-dwg' => 'application/acad', + 'application/x-autocad' => 'application/acad', + 'image/vnd.dwg' => 'application/acad', + 'drawing/dwg' => 'application/acad', + ]; +} |