]> granicus.if.org Git - php/commitdiff
Switch to mime-db as source of extension => MIME map
authorNikita Popov <nikita.ppv@gmail.com>
Wed, 24 Jun 2020 15:00:32 +0000 (17:00 +0200)
committerNikita Popov <nikita.ppv@gmail.com>
Thu, 13 Aug 2020 10:37:33 +0000 (12:37 +0200)
The Apache MIME type map is not actively maintained anymore, so
this switches to jshttp/mime-db, which seems to be the de-facto
standard in this area now. This avoid the need to patch in our
own MIME types over time.

The preference algorithm is based on:
https://github.com/jshttp/mime-types/blob/47b62ac45e9b176a2af35532d0eea4968bb9eb6d/index.js#L154

Closes GH-5764.

sapi/cli/generate_mime_type_map.php
sapi/cli/mime_type_map.h

index 3899680cf86608d98885115da31967ace8d44aaf..ca479d20d1725143ef7b6102e9af81a8f2c66919 100755 (executable)
@@ -3,32 +3,42 @@
 
 // Check if we are being given a mime.types file or if we should use the
 // default URL.
-$source = count($_SERVER['argv']) > 1 ? $_SERVER['argv'][1] : 'https://raw.githubusercontent.com/apache/httpd/trunk/docs/conf/mime.types';
+$source = count($argv) > 1 ? $argv[1] : 'https://cdn.jsdelivr.net/gh/jshttp/mime-db@v1.44.0/db.json';
 
 // See if we can actually load it.
-$types = @file($source);
-if ($types === false) {
+$data = @file_get_contents($source);
+if ($data === false) {
     fprintf(STDERR, "Error: unable to read $source\n");
     exit(1);
 }
 
-// Remove comments and flip into an extensions array.
+// Source preference from lowest to highest
+$prefs = ['nginx' => 1, 'apache' => 2, 'custom' => 3, 'iana' => 4];
+
 $extensions = [];
-array_walk($types, function ($line) use (&$extensions) {
-    $line = trim($line);
-    if ($line && $line[0] != '#') {
-        $fields = preg_split('/\s+/', $line);
-        if (count($fields) > 1) {
-            $mime = array_shift($fields);
-            foreach ($fields as $extension) {
-                $extensions[$extension] = $mime;
+$types = json_decode($data, true);
+foreach ($types as $mime => $info) {
+    $source = $info['source'] ?? 'custom';
+    $pref = $prefs[$source];
+    foreach ($info['extensions'] ?? [] as $extension) {
+        if (isset($extensions[$extension])) {
+            // Use same preference rules as jshttp/mime-types
+            [$oldMime, $oldPref] = $extensions[$extension];
+            if ($oldMime !== 'application/octet-stream'
+                && ($oldPref > $pref
+                    || ($oldPref === $pref && substr($oldMime, 0, 12) === 'application/'))) {
+                continue;
             }
         }
+
+        $extensions[$extension] = [$mime, $pref];
     }
-});
+}
+
+// Only keep the MIME type.
+$extensions = array_map(function($x) { return $x[0]; }, $extensions);
 
 $additional_mime_maps = [
-    "map" => "application/json",       // from commit: a0d62f08ae8cbebc88e5c92e08fca8d0cdc7309d
     "jsm" => "application/javascript",
 ];
 
index c5d80aa983cb5ffc4d33f0c2f8fcaf76a5d3df00..743586e3781680846f284b2552e916e457cd1379 100644 (file)
@@ -27,10 +27,13 @@ typedef struct php_cli_server_ext_mime_type_pair {
 
 static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "123", "application/vnd.lotus-1-2-3" },
+       { "1km", "application/vnd.1000minds.decision-model+xml" },
        { "3dml", "text/vnd.in3d.3dml" },
        { "3ds", "image/x-3ds" },
        { "3g2", "video/3gpp2" },
        { "3gp", "video/3gpp" },
+       { "3gpp", "video/3gpp" },
+       { "3mf", "model/3mf" },
        { "7z", "application/x-7z-compressed" },
        { "aab", "application/x-authorware-bin" },
        { "aac", "audio/x-aac" },
@@ -55,10 +58,12 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "ait", "application/vnd.dvb.ait" },
        { "ami", "application/vnd.amiga.ami" },
        { "apk", "application/vnd.android.package-archive" },
+       { "apng", "image/apng" },
        { "appcache", "text/cache-manifest" },
        { "application", "application/x-ms-application" },
        { "apr", "application/vnd.lotus-approach" },
        { "arc", "application/x-freearc" },
+       { "arj", "application/x-arj" },
        { "asc", "application/pgp-signature" },
        { "asf", "video/x-ms-asf" },
        { "asm", "text/x-asm" },
@@ -67,6 +72,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "atc", "application/vnd.acucorp" },
        { "atom", "application/atom+xml" },
        { "atomcat", "application/atomcat+xml" },
+       { "atomdeleted", "application/atomdeleted+xml" },
        { "atomsvc", "application/atomsvc+xml" },
        { "atx", "application/vnd.antix.game-component" },
        { "au", "audio/basic" },
@@ -74,23 +80,28 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "aw", "application/applixware" },
        { "azf", "application/vnd.airzip.filesecure.azf" },
        { "azs", "application/vnd.airzip.filesecure.azs" },
+       { "azv", "image/vnd.airzip.accelerator.azv" },
        { "azw", "application/vnd.amazon.ebook" },
        { "bat", "application/x-msdownload" },
        { "bcpio", "application/x-bcpio" },
        { "bdf", "application/x-font-bdf" },
        { "bdm", "application/vnd.syncml.dm+wbxml" },
+       { "bdoc", "application/bdoc" },
        { "bed", "application/vnd.realvnc.bed" },
        { "bh2", "application/vnd.fujitsu.oasysprs" },
        { "bin", "application/octet-stream" },
        { "blb", "application/x-blorb" },
        { "blorb", "application/x-blorb" },
        { "bmi", "application/vnd.bmi" },
+       { "bmml", "application/vnd.balsamiq.bmml+xml" },
        { "bmp", "image/bmp" },
        { "book", "application/vnd.framemaker" },
        { "box", "application/vnd.previewsystems.box" },
        { "boz", "application/x-bzip2" },
        { "bpk", "application/octet-stream" },
+       { "bsp", "model/vnd.valve.source.compiled-map" },
        { "btif", "image/prs.btif" },
+       { "buffer", "application/octet-stream" },
        { "bz", "application/x-bzip" },
        { "bz2", "application/x-bzip2" },
        { "c", "text/x-c" },
@@ -112,10 +123,12 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "cbt", "application/x-cbr" },
        { "cbz", "application/x-cbr" },
        { "cc", "text/x-c" },
+       { "cco", "application/x-cocoa" },
        { "cct", "application/x-director" },
        { "ccxml", "application/ccxml+xml" },
        { "cdbcmsg", "application/vnd.contact.cmsg" },
        { "cdf", "application/x-netcdf" },
+       { "cdfx", "application/cdfx+xml" },
        { "cdkey", "application/vnd.mediastation.cdkey" },
        { "cdmia", "application/cdmi-capability" },
        { "cdmic", "application/cdmi-container" },
@@ -134,6 +147,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "cif", "chemical/x-cif" },
        { "cii", "application/vnd.anser-web-certificate-issue-initiation" },
        { "cil", "application/vnd.ms-artgalry" },
+       { "cjs", "application/node" },
        { "cla", "application/vnd.claymore" },
        { "class", "application/java-vm" },
        { "clkk", "application/vnd.crick.clicker.keyboard" },
@@ -148,6 +162,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "cmp", "application/vnd.yellowriver-custom-menu" },
        { "cmx", "image/x-cmx" },
        { "cod", "application/vnd.rim.cod" },
+       { "coffee", "text/coffeescript" },
        { "com", "application/x-msdownload" },
        { "conf", "text/plain" },
        { "cpio", "application/x-cpio" },
@@ -156,8 +171,10 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "crd", "application/x-mscardfile" },
        { "crl", "application/pkix-crl" },
        { "crt", "application/x-x509-ca-cert" },
+       { "crx", "application/x-chrome-extension" },
        { "cryptonote", "application/vnd.rig.cryptonote" },
        { "csh", "application/x-csh" },
+       { "csl", "application/vnd.citationstyles.style+xml" },
        { "csml", "chemical/x-csml" },
        { "csp", "application/vnd.commonspace" },
        { "css", "text/css" },
@@ -178,6 +195,8 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "dcurl", "text/vnd.curl.dcurl" },
        { "dd2", "application/vnd.oma.dd2+xml" },
        { "ddd", "application/vnd.fujixerox.ddd" },
+       { "ddf", "application/vnd.syncml.dmddf+xml" },
+       { "dds", "image/vnd.ms-dds" },
        { "deb", "application/x-debian-package" },
        { "def", "text/plain" },
        { "deploy", "application/octet-stream" },
@@ -187,6 +206,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "dic", "text/x-c" },
        { "dir", "application/x-director" },
        { "dis", "application/vnd.mobius.dis" },
+       { "disposition-notification", "message/disposition-notification" },
        { "dist", "application/octet-stream" },
        { "distz", "application/octet-stream" },
        { "djv", "image/vnd.djvu" },
@@ -205,6 +225,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "dp", "application/vnd.osgi.dp" },
        { "dpg", "application/vnd.dpgraph" },
        { "dra", "audio/vnd.dra" },
+       { "drle", "image/dicom-rle" },
        { "dsc", "text/prs.lines.tag" },
        { "dssc", "application/dssc+der" },
        { "dtb", "application/x-dtbook+xml" },
@@ -214,11 +235,13 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "dump", "application/octet-stream" },
        { "dvb", "video/vnd.dvb.file" },
        { "dvi", "application/x-dvi" },
+       { "dwd", "application/atsc-dwd+xml" },
        { "dwf", "model/vnd.dwf" },
        { "dwg", "image/vnd.dwg" },
        { "dxf", "image/vnd.dxf" },
        { "dxp", "application/vnd.spotfire.dxp" },
        { "dxr", "application/x-director" },
+       { "ear", "application/java-archive" },
        { "ecelp4800", "audio/vnd.nuera.ecelp4800" },
        { "ecelp7470", "audio/vnd.nuera.ecelp7470" },
        { "ecelp9600", "audio/vnd.nuera.ecelp9600" },
@@ -228,14 +251,16 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "efif", "application/vnd.picsel" },
        { "ei6", "application/vnd.pg.osasli" },
        { "elc", "application/octet-stream" },
-       { "emf", "application/x-msmetafile" },
+       { "emf", "image/emf" },
        { "eml", "message/rfc822" },
        { "emma", "application/emma+xml" },
+       { "emotionml", "application/emotionml+xml" },
        { "emz", "application/x-msmetafile" },
        { "eol", "audio/vnd.digital-winds" },
        { "eot", "application/vnd.ms-fontobject" },
        { "eps", "application/postscript" },
        { "epub", "application/epub+zip" },
+       { "es", "application/ecmascript" },
        { "es3", "application/vnd.eszigno3+xml" },
        { "esa", "application/vnd.osgi.subsystem" },
        { "esf", "application/vnd.epson.esf" },
@@ -243,8 +268,9 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "etx", "text/x-setext" },
        { "eva", "application/x-eva" },
        { "evy", "application/x-envoy" },
-       { "exe", "application/x-msdownload" },
+       { "exe", "application/x-msdos-program" },
        { "exi", "application/exi" },
+       { "exr", "image/aces" },
        { "ext", "application/vnd.novadigm.ext" },
        { "ez", "application/andrew-inset" },
        { "ez2", "application/vnd.ezpix-album" },
@@ -257,6 +283,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "fcdt", "application/vnd.adobe.formscentral.fcdt" },
        { "fcs", "application/vnd.isac.fcs" },
        { "fdf", "application/vnd.fdf" },
+       { "fdt", "application/fdt+xml" },
        { "fe_launch", "application/vnd.denovo.fcselayout-link" },
        { "fg5", "application/vnd.fujitsu.oasysgp" },
        { "fgd", "application/x-director" },
@@ -266,6 +293,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "fh7", "image/x-freehand" },
        { "fhc", "image/x-freehand" },
        { "fig", "application/x-xfig" },
+       { "fits", "image/fits" },
        { "flac", "audio/x-flac" },
        { "fli", "video/x-fli" },
        { "flo", "application/vnd.micrografx.flo" },
@@ -275,6 +303,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "fly", "text/vnd.fly" },
        { "fm", "application/vnd.framemaker" },
        { "fnc", "application/vnd.frogans.fnc" },
+       { "fo", "application/vnd.software602.filler.form+xml" },
        { "for", "text/x-fortran" },
        { "fpx", "image/vnd.fpx" },
        { "frame", "application/vnd.framemaker" },
@@ -294,13 +323,17 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "gbr", "application/rpki-ghostbusters" },
        { "gca", "application/x-gca-compressed" },
        { "gdl", "model/vnd.gdl" },
+       { "gdoc", "application/vnd.google-apps.document" },
        { "geo", "application/vnd.dynageo" },
+       { "geojson", "application/geo+json" },
        { "gex", "application/vnd.geometry-explorer" },
        { "ggb", "application/vnd.geogebra.file" },
        { "ggt", "application/vnd.geogebra.tool" },
        { "ghf", "application/vnd.groove-help" },
        { "gif", "image/gif" },
        { "gim", "application/vnd.groove-identity-message" },
+       { "glb", "model/gltf-binary" },
+       { "gltf", "model/gltf+json" },
        { "gml", "application/gml+xml" },
        { "gmx", "application/vnd.gmx" },
        { "gnumeric", "application/x-gnumeric" },
@@ -314,25 +347,39 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "grv", "application/vnd.groove-injector" },
        { "grxml", "application/srgs+xml" },
        { "gsf", "application/x-font-ghostscript" },
+       { "gsheet", "application/vnd.google-apps.spreadsheet" },
+       { "gslides", "application/vnd.google-apps.presentation" },
        { "gtar", "application/x-gtar" },
        { "gtm", "application/vnd.groove-tool-message" },
        { "gtw", "model/vnd.gtw" },
        { "gv", "text/vnd.graphviz" },
        { "gxf", "application/gxf" },
        { "gxt", "application/vnd.geonext" },
+       { "gz", "application/gzip" },
        { "h", "text/x-c" },
        { "h261", "video/h261" },
        { "h263", "video/h263" },
        { "h264", "video/h264" },
        { "hal", "application/vnd.hal+xml" },
        { "hbci", "application/vnd.hbci" },
+       { "hbs", "text/x-handlebars-template" },
+       { "hdd", "application/x-virtualbox-hdd" },
        { "hdf", "application/x-hdf" },
+       { "heic", "image/heic" },
+       { "heics", "image/heic-sequence" },
+       { "heif", "image/heif" },
+       { "heifs", "image/heif-sequence" },
+       { "hej2", "image/hej2k" },
+       { "held", "application/atsc-held+xml" },
        { "hh", "text/x-c" },
+       { "hjson", "application/hjson" },
        { "hlp", "application/winhlp" },
        { "hpgl", "application/vnd.hp-hpgl" },
        { "hpid", "application/vnd.hp-hpid" },
        { "hps", "application/vnd.hp-hps" },
        { "hqx", "application/mac-binhex40" },
+       { "hsj2", "image/hsj2" },
+       { "htc", "text/x-component" },
        { "htke", "application/vnd.kenameaapp" },
        { "htm", "text/html" },
        { "html", "text/html" },
@@ -343,7 +390,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "icc", "application/vnd.iccprofile" },
        { "ice", "x-conference/x-cooltalk" },
        { "icm", "application/vnd.iccprofile" },
-       { "ico", "image/x-icon" },
+       { "ico", "image/vnd.microsoft.icon" },
        { "ics", "text/calendar" },
        { "ief", "image/ief" },
        { "ifb", "text/calendar" },
@@ -354,9 +401,11 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "igs", "model/iges" },
        { "igx", "application/vnd.micrografx.igx" },
        { "iif", "application/vnd.shana.informed.interchange" },
+       { "img", "application/octet-stream" },
        { "imp", "application/vnd.accpac.simply.imp" },
        { "ims", "application/vnd.ms-ims" },
        { "in", "text/plain" },
+       { "ini", "text/plain" },
        { "ink", "application/inkml+xml" },
        { "inkml", "application/inkml+xml" },
        { "install", "application/x-install-instructions" },
@@ -367,28 +416,51 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "irp", "application/vnd.irepository.package+xml" },
        { "iso", "application/x-iso9660-image" },
        { "itp", "application/vnd.shana.informed.formtemplate" },
+       { "its", "application/its+xml" },
        { "ivp", "application/vnd.immervision-ivp" },
        { "ivu", "application/vnd.immervision-ivu" },
        { "jad", "text/vnd.sun.j2me.app-descriptor" },
+       { "jade", "text/jade" },
        { "jam", "application/vnd.jam" },
        { "jar", "application/java-archive" },
+       { "jardiff", "application/x-java-archive-diff" },
        { "java", "text/x-java-source" },
+       { "jhc", "image/jphc" },
        { "jisp", "application/vnd.jisp" },
+       { "jls", "image/jls" },
        { "jlt", "application/vnd.hp-jlyt" },
+       { "jng", "image/x-jng" },
        { "jnlp", "application/x-java-jnlp-file" },
        { "joda", "application/vnd.joost.joda-archive" },
+       { "jp2", "image/jp2" },
        { "jpe", "image/jpeg" },
        { "jpeg", "image/jpeg" },
+       { "jpf", "image/jpx" },
        { "jpg", "image/jpeg" },
+       { "jpg2", "image/jp2" },
        { "jpgm", "video/jpm" },
        { "jpgv", "video/jpeg" },
-       { "jpm", "video/jpm" },
+       { "jph", "image/jph" },
+       { "jpm", "image/jpm" },
+       { "jpx", "image/jpx" },
        { "js", "application/javascript" },
        { "jsm", "application/javascript" },
        { "json", "application/json" },
+       { "json5", "application/json5" },
+       { "jsonld", "application/ld+json" },
        { "jsonml", "application/jsonml+json" },
+       { "jsx", "text/jsx" },
+       { "jxr", "image/jxr" },
+       { "jxra", "image/jxra" },
+       { "jxrs", "image/jxrs" },
+       { "jxs", "image/jxs" },
+       { "jxsc", "image/jxsc" },
+       { "jxsi", "image/jxsi" },
+       { "jxss", "image/jxss" },
        { "kar", "audio/midi" },
        { "karbon", "application/vnd.kde.karbon" },
+       { "kdbx", "application/x-keepass2" },
+       { "keynote", "application/vnd.apple.keynote" },
        { "kfo", "application/vnd.kde.kformula" },
        { "kia", "application/vnd.kidspiration" },
        { "kml", "application/vnd.google-earth.kml+xml" },
@@ -410,17 +482,22 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "lbd", "application/vnd.llamagraphics.life-balance.desktop" },
        { "lbe", "application/vnd.llamagraphics.life-balance.exchange+xml" },
        { "les", "application/vnd.hhe.lesson-player" },
+       { "less", "text/less" },
+       { "lgr", "application/lgr+xml" },
        { "lha", "application/x-lzh-compressed" },
        { "link66", "application/vnd.route66.link66+xml" },
        { "list", "text/plain" },
        { "list3820", "application/vnd.ibm.modcap" },
        { "listafp", "application/vnd.ibm.modcap" },
+       { "litcoffee", "text/coffeescript" },
        { "lnk", "application/x-ms-shortcut" },
        { "log", "text/plain" },
        { "lostxml", "application/lost+xml" },
        { "lrf", "application/octet-stream" },
        { "lrm", "application/vnd.ms-lrm" },
        { "ltf", "application/vnd.frogans.ltf" },
+       { "lua", "text/x-lua" },
+       { "luac", "application/x-lua-bytecode" },
        { "lvp", "audio/vnd.lucent.voice" },
        { "lwp", "application/vnd.lotus-wordpro" },
        { "lzh", "application/x-lzh-compressed" },
@@ -434,15 +511,19 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "m3u", "audio/x-mpegurl" },
        { "m3u8", "application/vnd.apple.mpegurl" },
        { "m4a", "audio/mp4" },
+       { "m4p", "application/mp4" },
        { "m4u", "video/vnd.mpegurl" },
        { "m4v", "video/x-m4v" },
        { "ma", "application/mathematica" },
        { "mads", "application/mads+xml" },
+       { "maei", "application/mmt-aei+xml" },
        { "mag", "application/vnd.ecowin.chart" },
        { "maker", "application/vnd.framemaker" },
        { "man", "text/troff" },
+       { "manifest", "text/cache-manifest" },
        { "map", "application/json" },
        { "mar", "application/octet-stream" },
+       { "markdown", "text/markdown" },
        { "mathml", "application/mathml+xml" },
        { "mb", "application/mathematica" },
        { "mbk", "application/vnd.mobius.mbk" },
@@ -450,8 +531,10 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "mc1", "application/vnd.medcalcdata" },
        { "mcd", "application/vnd.mcd" },
        { "mcurl", "text/vnd.curl.mcurl" },
+       { "md", "text/markdown" },
        { "mdb", "application/x-msaccess" },
        { "mdi", "image/vnd.ms-modi" },
+       { "mdx", "text/mdx" },
        { "me", "text/troff" },
        { "mesh", "model/mesh" },
        { "meta4", "application/metalink4+xml" },
@@ -468,13 +551,16 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "mime", "message/rfc822" },
        { "mj2", "video/mj2" },
        { "mjp2", "video/mj2" },
+       { "mjs", "application/javascript" },
        { "mk3d", "video/x-matroska" },
        { "mka", "audio/x-matroska" },
+       { "mkd", "text/x-markdown" },
        { "mks", "video/x-matroska" },
        { "mkv", "video/x-matroska" },
        { "mlp", "application/vnd.dolby.mlp" },
        { "mmd", "application/vnd.chipnuts.karaoke-mmd" },
        { "mmf", "application/vnd.smaf" },
+       { "mml", "text/mathml" },
        { "mmr", "image/vnd.fujixerox.edmics-mmr" },
        { "mng", "video/x-mng" },
        { "mny", "application/x-msmoney" },
@@ -491,6 +577,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "mp4s", "application/mp4" },
        { "mp4v", "video/mp4" },
        { "mpc", "application/vnd.mophun.certificate" },
+       { "mpd", "application/dash+xml" },
        { "mpe", "video/mpeg" },
        { "mpeg", "video/mpeg" },
        { "mpg", "video/mpeg" },
@@ -510,17 +597,23 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "mseed", "application/vnd.fdsn.mseed" },
        { "mseq", "application/vnd.mseq" },
        { "msf", "application/vnd.epson.msf" },
+       { "msg", "application/vnd.ms-outlook" },
        { "msh", "model/mesh" },
        { "msi", "application/x-msdownload" },
        { "msl", "application/vnd.mobius.msl" },
+       { "msm", "application/octet-stream" },
+       { "msp", "application/octet-stream" },
        { "msty", "application/vnd.muvee.style" },
+       { "mtl", "model/mtl" },
        { "mts", "model/vnd.mts" },
        { "mus", "application/vnd.musician" },
+       { "musd", "application/mmt-usd+xml" },
        { "musicxml", "application/vnd.recordare.musicxml+xml" },
        { "mvb", "application/x-msmediaview" },
        { "mwf", "application/vnd.mfer" },
        { "mxf", "application/mxf" },
        { "mxl", "application/vnd.recordare.musicxml" },
+       { "mxmf", "audio/mobile-xmf" },
        { "mxml", "application/xv+xml" },
        { "mxs", "application/vnd.triscape.mxs" },
        { "mxu", "video/vnd.mpegurl" },
@@ -539,15 +632,19 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "nns", "application/vnd.noblenet-sealer" },
        { "nnw", "application/vnd.noblenet-web" },
        { "npx", "image/vnd.net-fpx" },
+       { "nq", "application/n-quads" },
        { "nsc", "application/x-conference" },
        { "nsf", "application/vnd.lotus-notes" },
+       { "nt", "application/n-triples" },
        { "ntf", "application/vnd.nitf" },
+       { "numbers", "application/vnd.apple.numbers" },
        { "nzb", "application/x-nzb" },
        { "oa2", "application/vnd.fujitsu.oasys2" },
        { "oa3", "application/vnd.fujitsu.oasys3" },
        { "oas", "application/vnd.fujitsu.oasys" },
        { "obd", "application/x-msbinder" },
-       { "obj", "application/x-tgif" },
+       { "obgx", "application/vnd.openblox.game+xml" },
+       { "obj", "model/obj" },
        { "oda", "application/oda" },
        { "odb", "application/vnd.oasis.opendocument.database" },
        { "odc", "application/vnd.oasis.opendocument.chart" },
@@ -560,6 +657,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "ods", "application/vnd.oasis.opendocument.spreadsheet" },
        { "odt", "application/vnd.oasis.opendocument.text" },
        { "oga", "audio/ogg" },
+       { "ogex", "model/vnd.opengex" },
        { "ogg", "audio/ogg" },
        { "ogv", "video/ogg" },
        { "ogx", "application/ogg" },
@@ -574,6 +672,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "org", "application/vnd.lotus-organizer" },
        { "osf", "application/vnd.yamaha.openscoreformat" },
        { "osfpvg", "application/vnd.yamaha.openscoreformat.osfpvg+xml" },
+       { "osm", "application/vnd.openstreetmap.data+xml" },
        { "otc", "application/vnd.oasis.opendocument.chart-template" },
        { "otf", "font/otf" },
        { "otg", "application/vnd.oasis.opendocument.graphics-template" },
@@ -582,6 +681,9 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "otp", "application/vnd.oasis.opendocument.presentation-template" },
        { "ots", "application/vnd.oasis.opendocument.spreadsheet-template" },
        { "ott", "application/vnd.oasis.opendocument.text-template" },
+       { "ova", "application/x-virtualbox-ova" },
+       { "ovf", "application/x-virtualbox-ovf" },
+       { "owl", "application/rdf+xml" },
        { "oxps", "application/oxps" },
        { "oxt", "application/vnd.openofficeorg.extension" },
        { "p", "text/x-pascal" },
@@ -593,6 +695,8 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "p7r", "application/x-pkcs7-certreqresp" },
        { "p7s", "application/pkcs7-signature" },
        { "p8", "application/pkcs8" },
+       { "pac", "application/x-ns-proxy-autoconfig" },
+       { "pages", "application/vnd.apple.pages" },
        { "pas", "text/x-pascal" },
        { "paw", "application/vnd.pawaafile" },
        { "pbd", "application/vnd.powerbuilder6" },
@@ -603,9 +707,11 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "pclxl", "application/vnd.hp-pclxl" },
        { "pct", "image/x-pict" },
        { "pcurl", "application/vnd.curl.pcurl" },
-       { "pcx", "image/x-pcx" },
+       { "pcx", "image/vnd.zbrush.pcx" },
        { "pdb", "application/vnd.palm" },
+       { "pde", "text/x-processing" },
        { "pdf", "application/pdf" },
+       { "pem", "application/x-x509-ca-cert" },
        { "pfa", "application/x-font-type1" },
        { "pfb", "application/x-font-type1" },
        { "pfm", "application/x-font-type1" },
@@ -614,14 +720,18 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "pgm", "image/x-portable-graymap" },
        { "pgn", "application/x-chess-pgn" },
        { "pgp", "application/pgp-encrypted" },
+       { "php", "application/x-httpd-php" },
        { "pic", "image/x-pict" },
        { "pkg", "application/octet-stream" },
        { "pki", "application/pkixcmp" },
        { "pkipath", "application/pkix-pkipath" },
+       { "pkpass", "application/vnd.apple.pkpass" },
+       { "pl", "application/x-perl" },
        { "plb", "application/vnd.3gpp.pic-bw-large" },
        { "plc", "application/vnd.mobius.plc" },
        { "plf", "application/vnd.pocketlearn" },
        { "pls", "application/pls+xml" },
+       { "pm", "application/x-perl" },
        { "pml", "application/vnd.ctc-posml" },
        { "png", "image/png" },
        { "pnm", "image/x-portable-anymap" },
@@ -642,11 +752,13 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "prc", "application/x-mobipocket-ebook" },
        { "pre", "application/vnd.lotus-freelance" },
        { "prf", "application/pics-rules" },
+       { "provx", "application/provenance+xml" },
        { "ps", "application/postscript" },
        { "psb", "application/vnd.3gpp.pic-bw-small" },
        { "psd", "image/vnd.adobe.photoshop" },
        { "psf", "application/x-font-linux-psf" },
        { "pskcxml", "application/pskc+xml" },
+       { "pti", "image/prs.pti" },
        { "ptid", "application/vnd.pvi.ptid1" },
        { "pub", "application/x-mspublisher" },
        { "pvb", "application/vnd.3gpp.pic-bw-var" },
@@ -666,11 +778,14 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "qxt", "application/vnd.quark.quarkxpress" },
        { "ra", "audio/x-pn-realaudio" },
        { "ram", "audio/x-pn-realaudio" },
+       { "raml", "application/raml+yaml" },
+       { "rapd", "application/route-apd+xml" },
        { "rar", "application/x-rar-compressed" },
        { "ras", "image/x-cmu-raster" },
        { "rcprofile", "application/vnd.ipunplugged.rcprofile" },
        { "rdf", "application/rdf+xml" },
        { "rdz", "application/vnd.data-vision.rdz" },
+       { "relo", "application/p2p-overlay+xml" },
        { "rep", "application/vnd.businessobjects" },
        { "res", "application/x-dtbresource+xml" },
        { "rgb", "image/x-rgb" },
@@ -686,26 +801,34 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "rms", "application/vnd.jcp.javame.midlet-rms" },
        { "rmvb", "application/vnd.rn-realmedia-vbr" },
        { "rnc", "application/relax-ng-compact-syntax" },
+       { "rng", "application/xml" },
        { "roa", "application/rpki-roa" },
        { "roff", "text/troff" },
        { "rp9", "application/vnd.cloanto.rp9" },
+       { "rpm", "application/x-redhat-package-manager" },
        { "rpss", "application/vnd.nokia.radio-presets" },
        { "rpst", "application/vnd.nokia.radio-preset" },
        { "rq", "application/sparql-query" },
        { "rs", "application/rls-services+xml" },
+       { "rsat", "application/atsc-rsat+xml" },
        { "rsd", "application/rsd+xml" },
+       { "rsheet", "application/urc-ressheet+xml" },
        { "rss", "application/rss+xml" },
        { "rtf", "application/rtf" },
        { "rtx", "text/richtext" },
+       { "run", "application/x-makeself" },
+       { "rusd", "application/route-usd+xml" },
        { "s", "text/x-asm" },
        { "s3m", "audio/s3m" },
        { "saf", "application/vnd.yamaha.smaf-audio" },
+       { "sass", "text/x-sass" },
        { "sbml", "application/sbml+xml" },
        { "sc", "application/vnd.ibm.secure-container" },
        { "scd", "application/x-msschedule" },
        { "scm", "application/vnd.lotus-screencam" },
        { "scq", "application/scvp-cv-request" },
        { "scs", "application/scvp-cv-response" },
+       { "scss", "text/x-scss" },
        { "scurl", "text/vnd.curl.scurl" },
        { "sda", "application/vnd.stardivision.draw" },
        { "sdc", "application/vnd.stardivision.calc" },
@@ -714,11 +837,14 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "sdkm", "application/vnd.solent.sdkm+xml" },
        { "sdp", "application/sdp" },
        { "sdw", "application/vnd.stardivision.writer" },
+       { "sea", "application/x-sea" },
        { "see", "application/vnd.seemail" },
        { "seed", "application/vnd.fdsn.seed" },
        { "sema", "application/vnd.sema" },
        { "semd", "application/vnd.semd" },
        { "semf", "application/vnd.semf" },
+       { "senmlx", "application/senml+xml" },
+       { "sensmlx", "application/sensml+xml" },
        { "ser", "application/java-serialized-object" },
        { "setpay", "application/set-payment-initiation" },
        { "setreg", "application/set-registration-initiation" },
@@ -731,8 +857,11 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "sgml", "text/sgml" },
        { "sh", "application/x-sh" },
        { "shar", "application/x-shar" },
+       { "shex", "text/shex" },
        { "shf", "application/shf+xml" },
+       { "shtml", "text/html" },
        { "sid", "image/x-mrsid-image" },
+       { "sieve", "application/sieve" },
        { "sig", "application/pgp-signature" },
        { "sil", "audio/silk" },
        { "silo", "model/mesh" },
@@ -740,12 +869,16 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "sisx", "application/vnd.symbian.install" },
        { "sit", "application/x-stuffit" },
        { "sitx", "application/x-stuffitx" },
+       { "siv", "application/sieve" },
        { "skd", "application/vnd.koan" },
        { "skm", "application/vnd.koan" },
        { "skp", "application/vnd.koan" },
        { "skt", "application/vnd.koan" },
        { "sldm", "application/vnd.ms-powerpoint.slide.macroenabled.12" },
        { "sldx", "application/vnd.openxmlformats-officedocument.presentationml.slide" },
+       { "slim", "text/slim" },
+       { "slm", "text/slim" },
+       { "sls", "application/route-s-tsid+xml" },
        { "slt", "application/vnd.epson.salt" },
        { "sm", "application/vnd.stepmania.stepchart" },
        { "smf", "application/vnd.stardivision.math" },
@@ -778,9 +911,11 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "stf", "application/vnd.wt.stf" },
        { "sti", "application/vnd.sun.xml.impress.template" },
        { "stk", "application/hyperstudio" },
-       { "stl", "application/vnd.ms-pki.stl" },
+       { "stl", "model/stl" },
        { "str", "application/vnd.pg.format" },
        { "stw", "application/vnd.sun.xml.writer.template" },
+       { "styl", "text/stylus" },
+       { "stylus", "text/stylus" },
        { "sub", "text/vnd.dvb.subtitle" },
        { "sus", "application/vnd.sus-calendar" },
        { "susp", "application/vnd.sus-calendar" },
@@ -793,6 +928,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "swa", "application/x-director" },
        { "swf", "application/x-shockwave-flash" },
        { "swi", "application/vnd.aristanetworks.swi" },
+       { "swidtag", "application/swid+xml" },
        { "sxc", "application/vnd.sun.xml.calc" },
        { "sxd", "application/vnd.sun.xml.draw" },
        { "sxg", "application/vnd.sun.xml.writer.global" },
@@ -801,8 +937,10 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "sxw", "application/vnd.sun.xml.writer" },
        { "t", "text/troff" },
        { "t3", "application/x-t3vm-image" },
+       { "t38", "image/t38" },
        { "taglet", "application/vnd.mynfc" },
        { "tao", "application/vnd.tao.intent-module-archive" },
+       { "tap", "image/vnd.tencent.tap" },
        { "tar", "application/x-tar" },
        { "tcap", "application/vnd.3gpp2.tcap" },
        { "tcl", "application/x-tcl" },
@@ -815,28 +953,37 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "text", "text/plain" },
        { "tfi", "application/thraud+xml" },
        { "tfm", "application/x-tex-tfm" },
+       { "tfx", "image/tiff-fx" },
        { "tga", "image/x-tga" },
        { "thmx", "application/vnd.ms-officetheme" },
        { "tif", "image/tiff" },
        { "tiff", "image/tiff" },
+       { "tk", "application/x-tcl" },
        { "tmo", "application/vnd.tmobile-livetv" },
+       { "toml", "application/toml" },
        { "torrent", "application/x-bittorrent" },
        { "tpl", "application/vnd.groove-tool-template" },
        { "tpt", "application/vnd.trid.tpt" },
        { "tr", "text/troff" },
        { "tra", "application/vnd.trueapp" },
        { "trm", "application/x-msterminal" },
+       { "ts", "video/mp2t" },
        { "tsd", "application/timestamped-data" },
        { "tsv", "text/tab-separated-values" },
        { "ttc", "font/collection" },
        { "ttf", "font/ttf" },
        { "ttl", "text/turtle" },
+       { "ttml", "application/ttml+xml" },
        { "twd", "application/vnd.simtech-mindmapper" },
        { "twds", "application/vnd.simtech-mindmapper" },
        { "txd", "application/vnd.genomatix.tuxedo" },
        { "txf", "application/vnd.mobius.txf" },
        { "txt", "text/plain" },
        { "u32", "application/x-authorware-bin" },
+       { "u8dsn", "message/global-delivery-status" },
+       { "u8hdr", "message/global-headers" },
+       { "u8mdn", "message/global-disposition-notification" },
+       { "u8msg", "message/global" },
        { "udeb", "application/x-debian-package" },
        { "ufd", "application/vnd.ufdl" },
        { "ufdl", "application/vnd.ufdl" },
@@ -847,6 +994,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "uri", "text/uri-list" },
        { "uris", "text/uri-list" },
        { "urls", "text/uri-list" },
+       { "usdz", "model/vnd.usdz+zip" },
        { "ustar", "application/x-ustar" },
        { "utz", "application/vnd.uiq.theme" },
        { "uu", "text/x-uuencode" },
@@ -878,14 +1026,19 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "uvvz", "application/vnd.dece.zip" },
        { "uvx", "application/vnd.dece.unspecified" },
        { "uvz", "application/vnd.dece.zip" },
+       { "vbox", "application/x-virtualbox-vbox" },
+       { "vbox-extpack", "application/x-virtualbox-vbox-extpack" },
        { "vcard", "text/vcard" },
        { "vcd", "application/x-cdlink" },
        { "vcf", "text/x-vcard" },
        { "vcg", "application/vnd.groove-vcard" },
        { "vcs", "text/x-vcalendar" },
        { "vcx", "application/vnd.vcx" },
+       { "vdi", "application/x-virtualbox-vdi" },
+       { "vhd", "application/x-virtualbox-vhd" },
        { "vis", "application/vnd.visionary" },
        { "viv", "video/vnd.vivo" },
+       { "vmdk", "application/x-virtualbox-vmdk" },
        { "vob", "video/x-ms-vob" },
        { "vor", "application/vnd.stardivision.writer" },
        { "vox", "application/x-authorware-bin" },
@@ -895,11 +1048,16 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "vss", "application/vnd.visio" },
        { "vst", "application/vnd.visio" },
        { "vsw", "application/vnd.visio" },
+       { "vtf", "image/vnd.valve.source.texture" },
+       { "vtt", "text/vtt" },
        { "vtu", "model/vnd.vtu" },
        { "vxml", "application/voicexml+xml" },
        { "w3d", "application/x-director" },
        { "wad", "application/x-doom" },
-       { "wav", "audio/x-wav" },
+       { "wadl", "application/vnd.sun.wadl+xml" },
+       { "war", "application/java-archive" },
+       { "wasm", "application/wasm" },
+       { "wav", "audio/wave" },
        { "wax", "audio/x-ms-wax" },
        { "wbmp", "image/vnd.wap.wbmp" },
        { "wbs", "application/vnd.criticaltools.wbs+xml" },
@@ -908,7 +1066,9 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "wdb", "application/vnd.ms-works" },
        { "wdp", "image/vnd.ms-photo" },
        { "weba", "audio/webm" },
+       { "webapp", "application/x-web-app-manifest+json" },
        { "webm", "video/webm" },
+       { "webmanifest", "application/manifest+json" },
        { "webp", "image/webp" },
        { "wg", "application/vnd.pmi.widget" },
        { "wgt", "application/widget" },
@@ -916,14 +1076,14 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "wm", "video/x-ms-wm" },
        { "wma", "audio/x-ms-wma" },
        { "wmd", "application/x-ms-wmd" },
-       { "wmf", "application/x-msmetafile" },
+       { "wmf", "image/wmf" },
        { "wml", "text/vnd.wap.wml" },
        { "wmlc", "application/vnd.wap.wmlc" },
        { "wmls", "text/vnd.wap.wmlscript" },
        { "wmlsc", "application/vnd.wap.wmlscriptc" },
        { "wmv", "video/x-ms-wmv" },
        { "wmx", "video/x-ms-wmx" },
-       { "wmz", "application/x-msmetafile" },
+       { "wmz", "application/x-ms-wmz" },
        { "woff", "font/woff" },
        { "woff2", "font/woff2" },
        { "wpd", "application/vnd.wordperfect" },
@@ -932,28 +1092,35 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "wqd", "application/vnd.wqd" },
        { "wri", "application/x-mswrite" },
        { "wrl", "model/vrml" },
+       { "wsc", "message/vnd.wfa.wsc" },
        { "wsdl", "application/wsdl+xml" },
        { "wspolicy", "application/wspolicy+xml" },
        { "wtb", "application/vnd.webturbo" },
        { "wvx", "video/x-ms-wvx" },
        { "x32", "application/x-authorware-bin" },
        { "x3d", "model/x3d+xml" },
-       { "x3db", "model/x3d+binary" },
+       { "x3db", "model/x3d+fastinfoset" },
        { "x3dbz", "model/x3d+binary" },
-       { "x3dv", "model/x3d+vrml" },
+       { "x3dv", "model/x3d-vrml" },
        { "x3dvz", "model/x3d+vrml" },
        { "x3dz", "model/x3d+xml" },
+       { "x_b", "model/vnd.parasolid.transmit.binary" },
+       { "x_t", "model/vnd.parasolid.transmit.text" },
        { "xaml", "application/xaml+xml" },
        { "xap", "application/x-silverlight-app" },
        { "xar", "application/vnd.xara" },
+       { "xav", "application/xcap-att+xml" },
        { "xbap", "application/x-ms-xbap" },
        { "xbd", "application/vnd.fujixerox.docuworks.binder" },
        { "xbm", "image/x-xbitmap" },
-       { "xdf", "application/xcap-diff+xml" },
+       { "xca", "application/xcap-caps+xml" },
+       { "xcs", "application/calendar+xml" },
+       { "xdf", "application/mrb-consumer+xml" },
        { "xdm", "application/vnd.syncml.dm+xml" },
        { "xdp", "application/vnd.adobe.xdp+xml" },
        { "xdssc", "application/dssc+xml" },
        { "xdw", "application/vnd.fujixerox.docuworks" },
+       { "xel", "application/xcap-el+xml" },
        { "xenc", "application/xenc+xml" },
        { "xer", "application/patch-ops-error+xml" },
        { "xfdf", "application/vnd.adobe.xfdf" },
@@ -965,7 +1132,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "xla", "application/vnd.ms-excel" },
        { "xlam", "application/vnd.ms-excel.addin.macroenabled.12" },
        { "xlc", "application/vnd.ms-excel" },
-       { "xlf", "application/x-xliff+xml" },
+       { "xlf", "application/xliff+xml" },
        { "xlm", "application/vnd.ms-excel" },
        { "xls", "application/vnd.ms-excel" },
        { "xlsb", "application/vnd.ms-excel.sheet.binary.macroenabled.12" },
@@ -977,6 +1144,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "xlw", "application/vnd.ms-excel" },
        { "xm", "audio/xm" },
        { "xml", "application/xml" },
+       { "xns", "application/xcap-ns+xml" },
        { "xo", "application/vnd.olpc-sugar" },
        { "xop", "application/xop+xml" },
        { "xpi", "application/x-xpinstall" },
@@ -986,6 +1154,7 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "xps", "application/vnd.ms-xpsdocument" },
        { "xpw", "application/vnd.intercon.formnet" },
        { "xpx", "application/vnd.intercon.formnet" },
+       { "xsd", "application/xml" },
        { "xsl", "application/xml" },
        { "xslt", "application/xslt+xml" },
        { "xsm", "application/vnd.syncml+xml" },
@@ -996,8 +1165,11 @@ static const php_cli_server_ext_mime_type_pair mime_type_map[] = {
        { "xwd", "image/x-xwindowdump" },
        { "xyz", "chemical/x-xyz" },
        { "xz", "application/x-xz" },
+       { "yaml", "text/yaml" },
        { "yang", "application/yang" },
        { "yin", "application/yin+xml" },
+       { "yml", "text/yaml" },
+       { "ymp", "text/x-suse-ymp" },
        { "z1", "application/x-zmachine" },
        { "z2", "application/x-zmachine" },
        { "z3", "application/x-zmachine" },