Blog. Just Blog

Определение MIME-type файла по его расширению

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
MIME - Multipurpose Internet Mail Extension - стандарт для определения типа передаваемой информации и механизмов ее обработки. Он сообщает браузерам о том, как им надо обращаться с запрошенными файлами, имеющими то или иное расширение. Так, например, если сервер отдает браузеру в заголовках тип MIME "text/html" для файлов с расширениями htm, html и shtml, то браузер интерпретирует все файлы с этими расширениями как файлы HTML. Также очень желательно передавать корректный MIME-type при отдаче файлов скриптом в антилич-системах.

Недавно я ковырялся в одной коммерческой CMS с закрытым кодом и нашел там одну полезную функцию с большим списком MIME-типов для различных расширений файлов (всего около 400). Реализация самой функции была сделана ужасно, поэтому я ее тут даже приводить не буду. Список я немного почистил и сохранил в удобном для работы виде. Функцию тоже переписал:
  1. //----------------------------------------------------------
  2. // Функция определения MIME-типа файла по его расширению
  3. //----------------------------------------------------------
  4. function get_mime_type($ext) {
  5.     // Массив с MIME-типами
  6.     global $mimetypes;
  7.     // Расширение в нижний регистр
  8.     $ext=trim(strtolower($ext));
  9.     if ($ext!='' && isset($mimetypes[$ext])) {
  10.         // Если есть такой MIME-тип, то вернуть его
  11.         return $mimetypes[$ext];
  12.     }
  13.     else {
  14.         // Иначе вернуть дефолтный MIME-тип
  15.         return "application/force-download";
  16.     }    
  17. }
На входе функция получает расширение файла без точки, например, "zip", "MP3", и возвращает его MIME-тип, если его можно определить, или дефолтный, если расширение не содержится в списке. Расширение файла удобнее всего получить функцией pathinfo.

А вот и сам список, оформленный в виде массива и упорядоченный по алфавиту. По мере надобности вы можете самостоятельно добавлять в него нужные вам значения.
  1. $mimetypes = Array (
  2.     "123" => "application/vnd.lotus-1-2-3",
  3.     "3ds" => "image/x-3ds",
  4.     "669" => "audio/x-mod",
  5.     "a" => "application/x-archive",
  6.     "abw" => "application/x-abiword",
  7.     "ac3" => "audio/ac3",
  8.     "adb" => "text/x-adasrc",
  9.     "ads" => "text/x-adasrc",
  10.     "afm" => "application/x-font-afm",
  11.     "ag" => "image/x-applix-graphics",
  12.     "ai" => "application/illustrator",
  13.     "aif" => "audio/x-aiff",
  14.     "aifc" => "audio/x-aiff",
  15.     "aiff" => "audio/x-aiff",
  16.     "al" => "application/x-perl",
  17.     "arj" => "application/x-arj",
  18.     "as" => "application/x-applix-spreadsheet",
  19.     "asc" => "text/plain",
  20.     "asf" => "video/x-ms-asf",
  21.     "asp" => "application/x-asp",
  22.     "asx" => "video/x-ms-asf",
  23.     "au" => "audio/basic",
  24.     "avi" => "video/x-msvideo",
  25.     "aw" => "application/x-applix-word",
  26.     "bak" => "application/x-trash",
  27.     "bcpio" => "application/x-bcpio",
  28.     "bdf" => "application/x-font-bdf",
  29.     "bib" => "text/x-bibtex",
  30.     "bin" => "application/octet-stream",
  31.     "blend" => "application/x-blender",
  32.     "blender" => "application/x-blender",
  33.     "bmp" => "image/bmp",
  34.     "bz" => "application/x-bzip",
  35.     "bz2" => "application/x-bzip",
  36.     "c" => "text/x-csrc",
  37.     "c++" => "text/x-c++src",
  38.     "cc" => "text/x-c++src",
  39.     "cdf" => "application/x-netcdf",
  40.     "cdr" => "application/vnd.corel-draw",
  41.     "cer" => "application/x-x509-ca-cert",
  42.     "cert" => "application/x-x509-ca-cert",
  43.     "cgi" => "application/x-cgi",
  44.     "cgm" => "image/cgm",
  45.     "chrt" => "application/x-kchart",
  46.     "class" => "application/x-java",
  47.     "cls" => "text/x-tex",
  48.     "cpio" => "application/x-cpio",
  49.     "cpp" => "text/x-c++src",
  50.     "crt" => "application/x-x509-ca-cert",
  51.     "cs" => "text/x-csharp",
  52.     "csh" => "application/x-shellscript",
  53.     "css" => "text/css",
  54.     "cssl" => "text/css",
  55.     "csv" => "text/x-comma-separated-values",
  56.     "cur" => "image/x-win-bitmap",
  57.     "cxx" => "text/x-c++src",
  58.     "dat" => "video/mpeg",
  59.     "dbf" => "application/x-dbase",
  60.     "dc" => "application/x-dc-rom",
  61.     "dcl" => "text/x-dcl",
  62.     "dcm" => "image/x-dcm",
  63.     "deb" => "application/x-deb",
  64.     "der" => "application/x-x509-ca-cert",
  65.     "desktop" => "application/x-desktop",
  66.     "dia" => "application/x-dia-diagram",
  67.     "diff" => "text/x-patch",
  68.     "djv" => "image/vnd.djvu",
  69.     "djvu" => "image/vnd.djvu",
  70.     "doc" => "application/vnd.ms-word",
  71.     "dsl" => "text/x-dsl",
  72.     "dtd" => "text/x-dtd",
  73.     "dvi" => "application/x-dvi",
  74.     "dwg" => "image/vnd.dwg",
  75.     "dxf" => "image/vnd.dxf",
  76.     "egon" => "application/x-egon",
  77.     "el" => "text/x-emacs-lisp",
  78.     "eps" => "image/x-eps",
  79.     "epsf" => "image/x-eps",
  80.     "epsi" => "image/x-eps",
  81.     "etheme" => "application/x-e-theme",
  82.     "etx" => "text/x-setext",
  83.     "exe" => "application/x-ms-dos-executable",
  84.     "ez" => "application/andrew-inset",
  85.     "f" => "text/x-fortran",
  86.     "fig" => "image/x-xfig",
  87.     "fits" => "image/x-fits",
  88.     "flac" => "audio/x-flac",
  89.     "flc" => "video/x-flic",
  90.     "fli" => "video/x-flic",
  91.     "flw" => "application/x-kivio",
  92.     "fo" => "text/x-xslfo",
  93.     "g3" => "image/fax-g3",
  94.     "gb" => "application/x-gameboy-rom",
  95.     "gcrd" => "text/x-vcard",
  96.     "gen" => "application/x-genesis-rom",
  97.     "gg" => "application/x-sms-rom",
  98.     "gif" => "image/gif",
  99.     "glade" => "application/x-glade",
  100.     "gmo" => "application/x-gettext-translation",
  101.     "gnc" => "application/x-gnucash",
  102.     "gnucash" => "application/x-gnucash",
  103.     "gnumeric" => "application/x-gnumeric",
  104.     "gra" => "application/x-graphite",
  105.     "gsf" => "application/x-font-type1",
  106.     "gtar" => "application/x-gtar",
  107.     "gz" => "application/x-gzip",
  108.     "h" => "text/x-chdr",
  109.     "h++" => "text/x-chdr",
  110.     "hdf" => "application/x-hdf",
  111.     "hh" => "text/x-c++hdr",
  112.     "hp" => "text/x-chdr",
  113.     "hpgl" => "application/vnd.hp-hpgl",
  114.     "hs" => "text/x-haskell",
  115.     "htm" => "text/html",
  116.     "html" => "text/html",
  117.     "icb" => "image/x-icb",
  118.     "ico" => "image/x-ico",
  119.     "ics" => "text/calendar",
  120.     "idl" => "text/x-idl",
  121.     "ief" => "image/ief",
  122.     "iff" => "image/x-iff",
  123.     "ilbm" => "image/x-ilbm",
  124.     "iso" => "application/x-cd-image",
  125.     "it" => "audio/x-it",
  126.     "jar" => "application/x-jar",
  127.     "java" => "text/x-java",
  128.     "jng" => "image/x-jng",
  129.     "jp2" => "image/jpeg2000",
  130.     "jpe" => "image/jpeg",
  131.     "jpeg" => "image/jpeg",
  132.     "jpg" => "image/jpeg",
  133.     "jpr" => "application/x-jbuilder-project",
  134.     "jpx" => "application/x-jbuilder-project",
  135.     "js" => "application/x-javascript",
  136.     "karbon" => "application/x-karbon",
  137.     "kdelnk" => "application/x-desktop",
  138.     "kfo" => "application/x-kformula",
  139.     "kil" => "application/x-killustrator",
  140.     "kon" => "application/x-kontour",
  141.     "kpm" => "application/x-kpovmodeler",
  142.     "kpr" => "application/x-kpresenter",
  143.     "kpt" => "application/x-kpresenter",
  144.     "kra" => "application/x-krita",
  145.     "ksp" => "application/x-kspread",
  146.     "kud" => "application/x-kugar",
  147.     "kwd" => "application/x-kword",
  148.     "kwt" => "application/x-kword",
  149.     "la" => "application/x-shared-library-la",
  150.     "lha" => "application/x-lha",
  151.     "lhs" => "text/x-literate-haskell",
  152.     "lhz" => "application/x-lhz",
  153.     "log" => "text/x-log",
  154.     "ltx" => "text/x-tex",
  155.     "lwo" => "image/x-lwo",
  156.     "lwob" => "image/x-lwo",
  157.     "lws" => "image/x-lws",
  158.     "lyx" => "application/x-lyx",
  159.     "lzh" => "application/x-lha",
  160.     "lzo" => "application/x-lzop",
  161.     "m" => "text/x-objcsrc",
  162.     "m15" => "audio/x-mod",
  163.     "m3u" => "audio/x-mpegurl",
  164.     "man" => "application/x-troff-man",
  165.     "md" => "application/x-genesis-rom",
  166.     "me" => "text/x-troff-me",
  167.     "mgp" => "application/x-magicpoint",
  168.     "mid" => "audio/midi",
  169.     "midi" => "audio/midi",
  170.     "mif" => "application/x-mif",
  171.     "mkv" => "application/x-matroska",
  172.     "mm" => "text/x-troff-mm",
  173.     "mml" => "text/mathml",
  174.     "mng" => "video/x-mng",
  175.     "moc" => "text/x-moc",
  176.     "mod" => "audio/x-mod",
  177.     "moov" => "video/quicktime",
  178.     "mov" => "video/quicktime",
  179.     "movie" => "video/x-sgi-movie",
  180.     "mp2" => "video/mpeg",
  181.     "mp3" => "audio/x-mp3",
  182.     "mpe" => "video/mpeg",
  183.     "mpeg" => "video/mpeg",
  184.     "mpg" => "video/mpeg",
  185.     "ms" => "text/x-troff-ms",
  186.     "msod" => "image/x-msod",
  187.     "msx" => "application/x-msx-rom",
  188.     "mtm" => "audio/x-mod",
  189.     "n64" => "application/x-n64-rom",
  190.     "nc" => "application/x-netcdf",
  191.     "nes" => "application/x-nes-rom",
  192.     "nsv" => "video/x-nsv",
  193.     "o" => "application/x-object",
  194.     "obj" => "application/x-tgif",
  195.     "oda" => "application/oda",
  196.     "ogg" => "application/ogg",
  197.     "old" => "application/x-trash",
  198.     "oleo" => "application/x-oleo",
  199.     "p" => "text/x-pascal",
  200.     "p12" => "application/x-pkcs12",
  201.     "p7s" => "application/pkcs7-signature",
  202.     "pas" => "text/x-pascal",
  203.     "patch" => "text/x-patch",
  204.     "pbm" => "image/x-portable-bitmap",
  205.     "pcd" => "image/x-photo-cd",
  206.     "pcf" => "application/x-font-pcf",
  207.     "pcl" => "application/vnd.hp-pcl",
  208.     "pdb" => "application/vnd.palm",
  209.     "pdf" => "application/pdf",
  210.     "pem" => "application/x-x509-ca-cert",
  211.     "perl" => "application/x-perl",
  212.     "pfa" => "application/x-font-type1",
  213.     "pfb" => "application/x-font-type1",
  214.     "pfx" => "application/x-pkcs12",
  215.     "pgm" => "image/x-portable-graymap",
  216.     "pgn" => "application/x-chess-pgn",
  217.     "pgp" => "application/pgp",
  218.     "php" => "application/x-php",
  219.     "php3" => "application/x-php",
  220.     "php4" => "application/x-php",
  221.     "pict" => "image/x-pict",
  222.     "pict1" => "image/x-pict",
  223.     "pict2" => "image/x-pict",
  224.     "pl" => "application/x-perl",
  225.     "pls" => "audio/x-scpls",
  226.     "pm" => "application/x-perl",
  227.     "png" => "image/png",
  228.     "pnm" => "image/x-portable-anymap",
  229.     "po" => "text/x-gettext-translation",
  230.     "pot" => "text/x-gettext-translation-template",
  231.     "ppm" => "image/x-portable-pixmap",
  232.     "pps" => "application/vnd.ms-powerpoint",
  233.     "ppt" => "application/vnd.ms-powerpoint",
  234.     "ppz" => "application/vnd.ms-powerpoint",
  235.     "ps" => "application/postscript",
  236.     "psd" => "image/x-psd",
  237.     "psf" => "application/x-font-linux-psf",
  238.     "psid" => "audio/prs.sid",
  239.     "pw" => "application/x-pw",
  240.     "py" => "application/x-python",
  241.     "pyc" => "application/x-python-bytecode",
  242.     "pyo" => "application/x-python-bytecode",
  243.     "qif" => "application/x-qw",
  244.     "qt" => "video/quicktime",
  245.     "qtvr" => "video/quicktime",
  246.     "ra" => "audio/x-pn-realaudio",
  247.     "ram" => "audio/x-pn-realaudio",
  248.     "rar" => "application/x-rar",
  249.     "ras" => "image/x-cmu-raster",
  250.     "rdf" => "text/rdf",
  251.     "rej" => "application/x-reject",
  252.     "rgb" => "image/x-rgb",
  253.     "rle" => "image/rle",
  254.     "rm" => "audio/x-pn-realaudio",
  255.     "roff" => "application/x-troff",
  256.     "rpm" => "application/x-rpm",
  257.     "rss" => "text/rss",
  258.     "rtf" => "application/rtf",
  259.     "rtx" => "text/richtext",
  260.     "s3m" => "audio/x-s3m",
  261.     "sam" => "application/x-amipro",
  262.     "scm" => "text/x-scheme",
  263.     "sda" => "application/vnd.stardivision.draw",
  264.     "sdc" => "application/vnd.stardivision.calc",
  265.     "sdd" => "application/vnd.stardivision.impress",
  266.     "sdp" => "application/vnd.stardivision.impress",
  267.     "sds" => "application/vnd.stardivision.chart",
  268.     "sdw" => "application/vnd.stardivision.writer",
  269.     "sgi" => "image/x-sgi",
  270.     "sgl" => "application/vnd.stardivision.writer",
  271.     "sgm" => "text/sgml",
  272.     "sgml" => "text/sgml",
  273.     "sh" => "application/x-shellscript",
  274.     "shar" => "application/x-shar",
  275.     "siag" => "application/x-siag",
  276.     "sid" => "audio/prs.sid",
  277.     "sik" => "application/x-trash",
  278.     "slk" => "text/spreadsheet",
  279.     "smd" => "application/vnd.stardivision.mail",
  280.     "smf" => "application/vnd.stardivision.math",
  281.     "smi" => "application/smil",
  282.     "smil" => "application/smil",
  283.     "sml" => "application/smil",
  284.     "sms" => "application/x-sms-rom",
  285.     "snd" => "audio/basic",
  286.     "so" => "application/x-sharedlib",
  287.     "spd" => "application/x-font-speedo",
  288.     "sql" => "text/x-sql",
  289.     "src" => "application/x-wais-source",
  290.     "stc" => "application/vnd.sun.xml.calc.template",
  291.     "std" => "application/vnd.sun.xml.draw.template",
  292.     "sti" => "application/vnd.sun.xml.impress.template",
  293.     "stm" => "audio/x-stm",
  294.     "stw" => "application/vnd.sun.xml.writer.template",
  295.     "sty" => "text/x-tex",
  296.     "sun" => "image/x-sun-raster",
  297.     "sv4cpio" => "application/x-sv4cpio",
  298.     "sv4crc" => "application/x-sv4crc",
  299.     "svg" => "image/svg+xml",
  300.     "swf" => "application/x-shockwave-flash",
  301.     "sxc" => "application/vnd.sun.xml.calc",
  302.     "sxd" => "application/vnd.sun.xml.draw",
  303.     "sxg" => "application/vnd.sun.xml.writer.global",
  304.     "sxi" => "application/vnd.sun.xml.impress",
  305.     "sxm" => "application/vnd.sun.xml.math",
  306.     "sxw" => "application/vnd.sun.xml.writer",
  307.     "sylk" => "text/spreadsheet",
  308.     "t" => "application/x-troff",
  309.     "tar" => "application/x-tar",
  310.     "tcl" => "text/x-tcl",
  311.     "tcpalette" => "application/x-terminal-color-palette",
  312.     "tex" => "text/x-tex",
  313.     "texi" => "text/x-texinfo",
  314.     "texinfo" => "text/x-texinfo",
  315.     "tga" => "image/x-tga",
  316.     "tgz" => "application/x-compressed-tar",
  317.     "theme" => "application/x-theme",
  318.     "tif" => "image/tiff",
  319.     "tiff" => "image/tiff",
  320.     "tk" => "text/x-tcl",
  321.     "torrent" => "application/x-bittorrent",
  322.     "tr" => "application/x-troff",
  323.     "ts" => "application/x-linguist",
  324.     "tsv" => "text/tab-separated-values",
  325.     "ttf" => "application/x-font-ttf",
  326.     "txt" => "text/plain",
  327.     "tzo" => "application/x-tzo",
  328.     "ui" => "application/x-designer",
  329.     "uil" => "text/x-uil",
  330.     "ult" => "audio/x-mod",
  331.     "uni" => "audio/x-mod",
  332.     "uri" => "text/x-uri",
  333.     "url" => "text/x-uri",
  334.     "ustar" => "application/x-ustar",
  335.     "vcf" => "text/x-vcalendar",
  336.     "vcs" => "text/x-vcalendar",
  337.     "vct" => "text/x-vcard",
  338.     "vob" => "video/mpeg",
  339.     "voc" => "audio/x-voc",
  340.     "vor" => "application/vnd.stardivision.writer",
  341.     "vpp" => "application/x-extension-vpp",
  342.     "wav" => "audio/x-wav",
  343.     "wb1" => "application/x-quattropro",
  344.     "wb2" => "application/x-quattropro",
  345.     "wb3" => "application/x-quattropro",
  346.     "wk1" => "application/vnd.lotus-1-2-3",
  347.     "wk3" => "application/vnd.lotus-1-2-3",
  348.     "wk4" => "application/vnd.lotus-1-2-3",
  349.     "wks" => "application/vnd.lotus-1-2-3",
  350.     "wmf" => "image/x-wmf",
  351.     "wml" => "text/vnd.wap.wml",
  352.     "wmv" => "video/x-ms-wmv",
  353.     "wpd" => "application/vnd.wordperfect",
  354.     "wpg" => "application/x-wpg",
  355.     "wri" => "application/x-mswrite",
  356.     "wrl" => "model/vrml",
  357.     "xac" => "application/x-gnucash",
  358.     "xbel" => "application/x-xbel",
  359.     "xbm" => "image/x-xbitmap",
  360.     "xcf" => "image/x-xcf",
  361.     "xhtml" => "application/xhtml+xml",
  362.     "xi" => "audio/x-xi",
  363.     "xla" => "application/vnd.ms-excel",
  364.     "xlc" => "application/vnd.ms-excel",
  365.     "xld" => "application/vnd.ms-excel",
  366.     "xll" => "application/vnd.ms-excel",
  367.     "xlm" => "application/vnd.ms-excel",
  368.     "xls" => "application/vnd.ms-excel",
  369.     "xlt" => "application/vnd.ms-excel",
  370.     "xlw" => "application/vnd.ms-excel",
  371.     "xm" => "audio/x-xm",
  372.     "xmi" => "text/x-xmi",
  373.     "xml" => "text/xml",
  374.     "xpm" => "image/x-xpixmap",
  375.     "xsl" => "text/x-xslt",
  376.     "xslfo" => "text/x-xslfo",
  377.     "xslt" => "text/x-xslt",
  378.     "xwd" => "image/x-xwindowdump",
  379.     "z" => "application/x-compress",
  380.     "zabw" => "application/x-abiword",
  381.     "zip" => "application/zip",
  382.     "zoo" => "application/x-zoo"
  383. );
Вообще стандарт MIME-type изначально задумывался для передачи данных по электронной почте, так что эту функцию можно использовать и по прямому назначению - при формировании писем с вложениями для отправки средствами PHP. Но об этом я расскажу в другой раз.

Поделиться ссылкой ВКонтакте
Просмотров: 16334 | Комментариев: 9

Метки: PHP
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Camsip.ru (07.07.2015 в 18:22):
Пример: есть Китайский файл: "HLS-0003765.ts" (видео), ts - не подходит, ибо он quicktime (то есть .mov) как его, за какие яйца брать - никак не хочет. Что-то пытается "качать", но или нет кодека qt или не mime. И как его впаять в html5 - никак не хочет... Хочу в три строки...
Василий (27.02.2013 в 07:32):
Спасибо большое. Для пересылки картинок то, что нужно !
ManHunter (26.11.2011 в 19:07):
Ставь LiveHTTPHeaders на Firefox и смотри какие заголовки фактически отдаются в браузер под тот или иной тип файла. Может сервер клал с пробором на твой .htaccess и берет свои значения.
Не поможет - заворачивай загрузку через mod_rewrite на скрипт, который будет отдавать правильные хидеры для браузера.
Александр (25.11.2011 в 22:47):
"ttf" => "application/x-font-ttf",

пишу Add type application/x-font-ttf .ttf  в .htaccess и этот подтип апликашна не меняет нежелания браузера предлагать мне сохранить файл на диск. Мерзопакостным образом открывает новую вкладку с билибердой.

Add type application/octet-stream .ttf тоже не работает. Есть ли для ттф что еще?
ManHunter (12.08.2011 в 09:11):
Василий, твой "авторитетный источник" - это не википедия, а обычная любительская страничка. Информация на сайте MS:
http://technet.microsoft.com/r...e.12%29.aspx
http://support.microsoft.com/?id=936496
У всех офисных документов идет префикс "vnd.", а в качестве суффикса перечислены дополнительные свойства документа. В оригинале: Vendor-specific types have a subtype with a vnd. prefix, as follows: type/vnd.subtype
MirDD (12.08.2011 в 08:32):
"doc" => "application/vnd.ms-word"
что за vnd. ? должно быть просто application/ms-word загляните в википедию http://www.spravkaweb.ru/php/pril/mime
Infocatcher (04.07.2010 в 23:58):
Еще в коллекцию:
"xpi" => "application/x-xpinstall",
"xul" => "application/vnd.mozilla.xul+xml",
ManHunter (03.07.2010 в 22:48):
Скорее всего на хостинге неправильно установлена локаль. В этом случае многие строковые функции ведут себя странно.
LaeX (03.07.2010 в 14:56):
Спасибо за полезную статью! Но мне не всегда помогает strtolower($ext), иногда приходится использовать:
$ext = strtr($ext, 'ABCDE','abcde');
Из-за чего бы это? На локальном сервере работает strtolower(), а на хостинге только strtr()…

Добавить комментарий

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.07 сек. / MySQL: 2 (0.0029 сек.) / Память: 4.75 Mb
Наверх