PHP

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

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

Недавно я ковырялся в одной коммерческой CMS с закрытым кодом и нашел там одну полезную функцию с большим списком MIME-типов для различных расширений файлов (всего около 400). Реализация самой функции была сделана ужасно, поэтому я ее тут даже приводить не буду. Список я немного почистил и сохранил в удобном для работы виде. Функцию тоже переписал:
//----------------------------------------------------------
// Функция определения MIME-типа файла по его расширению
//----------------------------------------------------------
function get_mime_type($ext) {
    // Массив с MIME-типами
    global $mimetypes;
    // Расширение в нижний регистр
    $ext=trim(strtolower($ext));
    if ($ext!='' && isset($mimetypes[$ext])) {
        // Если есть такой MIME-тип, то вернуть его
        return $mimetypes[$ext];
    }
    else {
        // Иначе вернуть дефолтный MIME-тип
        return "application/force-download";
    }    
}

На входе функция получает расширение файла без точки, например, "zip", "MP3", и возвращает его MIME-тип, если его можно определить, или дефолтный, если расширение не содержится в списке. Расширение файла удобнее всего получить функцией pathinfo.

А вот и сам список, оформленный в виде массива и упорядоченный по алфавиту. По мере надобности вы можете самостоятельно добавлять в него нужные вам значения.
$mimetypes = Array (
    "123" => "application/vnd.lotus-1-2-3",
    "3ds" => "image/x-3ds",
    "669" => "audio/x-mod",
    "a" => "application/x-archive",
    "abw" => "application/x-abiword",
    "ac3" => "audio/ac3",
    "adb" => "text/x-adasrc",
    "ads" => "text/x-adasrc",
    "afm" => "application/x-font-afm",
    "ag" => "image/x-applix-graphics",
    "ai" => "application/illustrator",
    "aif" => "audio/x-aiff",
    "aifc" => "audio/x-aiff",
    "aiff" => "audio/x-aiff",
    "al" => "application/x-perl",
    "arj" => "application/x-arj",
    "as" => "application/x-applix-spreadsheet",
    "asc" => "text/plain",
    "asf" => "video/x-ms-asf",
    "asp" => "application/x-asp",
    "asx" => "video/x-ms-asf",
    "au" => "audio/basic",
    "avi" => "video/x-msvideo",
    "aw" => "application/x-applix-word",
    "bak" => "application/x-trash",
    "bcpio" => "application/x-bcpio",
    "bdf" => "application/x-font-bdf",
    "bib" => "text/x-bibtex",
    "bin" => "application/octet-stream",
    "blend" => "application/x-blender",
    "blender" => "application/x-blender",
    "bmp" => "image/bmp",
    "bz" => "application/x-bzip",
    "bz2" => "application/x-bzip",
    "c" => "text/x-csrc",
    "c++" => "text/x-c++src",
    "cc" => "text/x-c++src",
    "cdf" => "application/x-netcdf",
    "cdr" => "application/vnd.corel-draw",
    "cer" => "application/x-x509-ca-cert",
    "cert" => "application/x-x509-ca-cert",
    "cgi" => "application/x-cgi",
    "cgm" => "image/cgm",
    "chrt" => "application/x-kchart",
    "class" => "application/x-java",
    "cls" => "text/x-tex",
    "cpio" => "application/x-cpio",
    "cpp" => "text/x-c++src",
    "crt" => "application/x-x509-ca-cert",
    "cs" => "text/x-csharp",
    "csh" => "application/x-shellscript",
    "css" => "text/css",
    "cssl" => "text/css",
    "csv" => "text/x-comma-separated-values",
    "cur" => "image/x-win-bitmap",
    "cxx" => "text/x-c++src",
    "dat" => "video/mpeg",
    "dbf" => "application/x-dbase",
    "dc" => "application/x-dc-rom",
    "dcl" => "text/x-dcl",
    "dcm" => "image/x-dcm",
    "deb" => "application/x-deb",
    "der" => "application/x-x509-ca-cert",
    "desktop" => "application/x-desktop",
    "dia" => "application/x-dia-diagram",
    "diff" => "text/x-patch",
    "djv" => "image/vnd.djvu",
    "djvu" => "image/vnd.djvu",
    "doc" => "application/vnd.ms-word",
    "dsl" => "text/x-dsl",
    "dtd" => "text/x-dtd",
    "dvi" => "application/x-dvi",
    "dwg" => "image/vnd.dwg",
    "dxf" => "image/vnd.dxf",
    "egon" => "application/x-egon",
    "el" => "text/x-emacs-lisp",
    "eps" => "image/x-eps",
    "epsf" => "image/x-eps",
    "epsi" => "image/x-eps",
    "etheme" => "application/x-e-theme",
    "etx" => "text/x-setext",
    "exe" => "application/x-ms-dos-executable",
    "ez" => "application/andrew-inset",
    "f" => "text/x-fortran",
    "fig" => "image/x-xfig",
    "fits" => "image/x-fits",
    "flac" => "audio/x-flac",
    "flc" => "video/x-flic",
    "fli" => "video/x-flic",
    "flw" => "application/x-kivio",
    "fo" => "text/x-xslfo",
    "g3" => "image/fax-g3",
    "gb" => "application/x-gameboy-rom",
    "gcrd" => "text/x-vcard",
    "gen" => "application/x-genesis-rom",
    "gg" => "application/x-sms-rom",
    "gif" => "image/gif",
    "glade" => "application/x-glade",
    "gmo" => "application/x-gettext-translation",
    "gnc" => "application/x-gnucash",
    "gnucash" => "application/x-gnucash",
    "gnumeric" => "application/x-gnumeric",
    "gra" => "application/x-graphite",
    "gsf" => "application/x-font-type1",
    "gtar" => "application/x-gtar",
    "gz" => "application/x-gzip",
    "h" => "text/x-chdr",
    "h++" => "text/x-chdr",
    "hdf" => "application/x-hdf",
    "hh" => "text/x-c++hdr",
    "hp" => "text/x-chdr",
    "hpgl" => "application/vnd.hp-hpgl",
    "hs" => "text/x-haskell",
    "htm" => "text/html",
    "html" => "text/html",
    "icb" => "image/x-icb",
    "ico" => "image/x-ico",
    "ics" => "text/calendar",
    "idl" => "text/x-idl",
    "ief" => "image/ief",
    "iff" => "image/x-iff",
    "ilbm" => "image/x-ilbm",
    "iso" => "application/x-cd-image",
    "it" => "audio/x-it",
    "jar" => "application/x-jar",
    "java" => "text/x-java",
    "jng" => "image/x-jng",
    "jp2" => "image/jpeg2000",
    "jpe" => "image/jpeg",
    "jpeg" => "image/jpeg",
    "jpg" => "image/jpeg",
    "jpr" => "application/x-jbuilder-project",
    "jpx" => "application/x-jbuilder-project",
    "js" => "application/x-javascript",
    "karbon" => "application/x-karbon",
    "kdelnk" => "application/x-desktop",
    "kfo" => "application/x-kformula",
    "kil" => "application/x-killustrator",
    "kon" => "application/x-kontour",
    "kpm" => "application/x-kpovmodeler",
    "kpr" => "application/x-kpresenter",
    "kpt" => "application/x-kpresenter",
    "kra" => "application/x-krita",
    "ksp" => "application/x-kspread",
    "kud" => "application/x-kugar",
    "kwd" => "application/x-kword",
    "kwt" => "application/x-kword",
    "la" => "application/x-shared-library-la",
    "lha" => "application/x-lha",
    "lhs" => "text/x-literate-haskell",
    "lhz" => "application/x-lhz",
    "log" => "text/x-log",
    "ltx" => "text/x-tex",
    "lwo" => "image/x-lwo",
    "lwob" => "image/x-lwo",
    "lws" => "image/x-lws",
    "lyx" => "application/x-lyx",
    "lzh" => "application/x-lha",
    "lzo" => "application/x-lzop",
    "m" => "text/x-objcsrc",
    "m15" => "audio/x-mod",
    "m3u" => "audio/x-mpegurl",
    "man" => "application/x-troff-man",
    "md" => "application/x-genesis-rom",
    "me" => "text/x-troff-me",
    "mgp" => "application/x-magicpoint",
    "mid" => "audio/midi",
    "midi" => "audio/midi",
    "mif" => "application/x-mif",
    "mkv" => "application/x-matroska",
    "mm" => "text/x-troff-mm",
    "mml" => "text/mathml",
    "mng" => "video/x-mng",
    "moc" => "text/x-moc",
    "mod" => "audio/x-mod",
    "moov" => "video/quicktime",
    "mov" => "video/quicktime",
    "movie" => "video/x-sgi-movie",
    "mp2" => "video/mpeg",
    "mp3" => "audio/x-mp3",
    "mpe" => "video/mpeg",
    "mpeg" => "video/mpeg",
    "mpg" => "video/mpeg",
    "ms" => "text/x-troff-ms",
    "msod" => "image/x-msod",
    "msx" => "application/x-msx-rom",
    "mtm" => "audio/x-mod",
    "n64" => "application/x-n64-rom",
    "nc" => "application/x-netcdf",
    "nes" => "application/x-nes-rom",
    "nsv" => "video/x-nsv",
    "o" => "application/x-object",
    "obj" => "application/x-tgif",
    "oda" => "application/oda",
    "ogg" => "application/ogg",
    "old" => "application/x-trash",
    "oleo" => "application/x-oleo",
    "p" => "text/x-pascal",
    "p12" => "application/x-pkcs12",
    "p7s" => "application/pkcs7-signature",
    "pas" => "text/x-pascal",
    "patch" => "text/x-patch",
    "pbm" => "image/x-portable-bitmap",
    "pcd" => "image/x-photo-cd",
    "pcf" => "application/x-font-pcf",
    "pcl" => "application/vnd.hp-pcl",
    "pdb" => "application/vnd.palm",
    "pdf" => "application/pdf",
    "pem" => "application/x-x509-ca-cert",
    "perl" => "application/x-perl",
    "pfa" => "application/x-font-type1",
    "pfb" => "application/x-font-type1",
    "pfx" => "application/x-pkcs12",
    "pgm" => "image/x-portable-graymap",
    "pgn" => "application/x-chess-pgn",
    "pgp" => "application/pgp",
    "php" => "application/x-php",
    "php3" => "application/x-php",
    "php4" => "application/x-php",
    "pict" => "image/x-pict",
    "pict1" => "image/x-pict",
    "pict2" => "image/x-pict",
    "pl" => "application/x-perl",
    "pls" => "audio/x-scpls",
    "pm" => "application/x-perl",
    "png" => "image/png",
    "pnm" => "image/x-portable-anymap",
    "po" => "text/x-gettext-translation",
    "pot" => "text/x-gettext-translation-template",
    "ppm" => "image/x-portable-pixmap",
    "pps" => "application/vnd.ms-powerpoint",
    "ppt" => "application/vnd.ms-powerpoint",
    "ppz" => "application/vnd.ms-powerpoint",
    "ps" => "application/postscript",
    "psd" => "image/x-psd",
    "psf" => "application/x-font-linux-psf",
    "psid" => "audio/prs.sid",
    "pw" => "application/x-pw",
    "py" => "application/x-python",
    "pyc" => "application/x-python-bytecode",
    "pyo" => "application/x-python-bytecode",
    "qif" => "application/x-qw",
    "qt" => "video/quicktime",
    "qtvr" => "video/quicktime",
    "ra" => "audio/x-pn-realaudio",
    "ram" => "audio/x-pn-realaudio",
    "rar" => "application/x-rar",
    "ras" => "image/x-cmu-raster",
    "rdf" => "text/rdf",
    "rej" => "application/x-reject",
    "rgb" => "image/x-rgb",
    "rle" => "image/rle",
    "rm" => "audio/x-pn-realaudio",
    "roff" => "application/x-troff",
    "rpm" => "application/x-rpm",
    "rss" => "text/rss",
    "rtf" => "application/rtf",
    "rtx" => "text/richtext",
    "s3m" => "audio/x-s3m",
    "sam" => "application/x-amipro",
    "scm" => "text/x-scheme",
    "sda" => "application/vnd.stardivision.draw",
    "sdc" => "application/vnd.stardivision.calc",
    "sdd" => "application/vnd.stardivision.impress",
    "sdp" => "application/vnd.stardivision.impress",
    "sds" => "application/vnd.stardivision.chart",
    "sdw" => "application/vnd.stardivision.writer",
    "sgi" => "image/x-sgi",
    "sgl" => "application/vnd.stardivision.writer",
    "sgm" => "text/sgml",
    "sgml" => "text/sgml",
    "sh" => "application/x-shellscript",
    "shar" => "application/x-shar",
    "siag" => "application/x-siag",
    "sid" => "audio/prs.sid",
    "sik" => "application/x-trash",
    "slk" => "text/spreadsheet",
    "smd" => "application/vnd.stardivision.mail",
    "smf" => "application/vnd.stardivision.math",
    "smi" => "application/smil",
    "smil" => "application/smil",
    "sml" => "application/smil",
    "sms" => "application/x-sms-rom",
    "snd" => "audio/basic",
    "so" => "application/x-sharedlib",
    "spd" => "application/x-font-speedo",
    "sql" => "text/x-sql",
    "src" => "application/x-wais-source",
    "stc" => "application/vnd.sun.xml.calc.template",
    "std" => "application/vnd.sun.xml.draw.template",
    "sti" => "application/vnd.sun.xml.impress.template",
    "stm" => "audio/x-stm",
    "stw" => "application/vnd.sun.xml.writer.template",
    "sty" => "text/x-tex",
    "sun" => "image/x-sun-raster",
    "sv4cpio" => "application/x-sv4cpio",
    "sv4crc" => "application/x-sv4crc",
    "svg" => "image/svg+xml",
    "swf" => "application/x-shockwave-flash",
    "sxc" => "application/vnd.sun.xml.calc",
    "sxd" => "application/vnd.sun.xml.draw",
    "sxg" => "application/vnd.sun.xml.writer.global",
    "sxi" => "application/vnd.sun.xml.impress",
    "sxm" => "application/vnd.sun.xml.math",
    "sxw" => "application/vnd.sun.xml.writer",
    "sylk" => "text/spreadsheet",
    "t" => "application/x-troff",
    "tar" => "application/x-tar",
    "tcl" => "text/x-tcl",
    "tcpalette" => "application/x-terminal-color-palette",
    "tex" => "text/x-tex",
    "texi" => "text/x-texinfo",
    "texinfo" => "text/x-texinfo",
    "tga" => "image/x-tga",
    "tgz" => "application/x-compressed-tar",
    "theme" => "application/x-theme",
    "tif" => "image/tiff",
    "tiff" => "image/tiff",
    "tk" => "text/x-tcl",
    "torrent" => "application/x-bittorrent",
    "tr" => "application/x-troff",
    "ts" => "application/x-linguist",
    "tsv" => "text/tab-separated-values",
    "ttf" => "application/x-font-ttf",
    "txt" => "text/plain",
    "tzo" => "application/x-tzo",
    "ui" => "application/x-designer",
    "uil" => "text/x-uil",
    "ult" => "audio/x-mod",
    "uni" => "audio/x-mod",
    "uri" => "text/x-uri",
    "url" => "text/x-uri",
    "ustar" => "application/x-ustar",
    "vcf" => "text/x-vcalendar",
    "vcs" => "text/x-vcalendar",
    "vct" => "text/x-vcard",
    "vob" => "video/mpeg",
    "voc" => "audio/x-voc",
    "vor" => "application/vnd.stardivision.writer",
    "vpp" => "application/x-extension-vpp",
    "wav" => "audio/x-wav",
    "wb1" => "application/x-quattropro",
    "wb2" => "application/x-quattropro",
    "wb3" => "application/x-quattropro",
    "wk1" => "application/vnd.lotus-1-2-3",
    "wk3" => "application/vnd.lotus-1-2-3",
    "wk4" => "application/vnd.lotus-1-2-3",
    "wks" => "application/vnd.lotus-1-2-3",
    "wmf" => "image/x-wmf",
    "wml" => "text/vnd.wap.wml",
    "wmv" => "video/x-ms-wmv",
    "wpd" => "application/vnd.wordperfect",
    "wpg" => "application/x-wpg",
    "wri" => "application/x-mswrite",
    "wrl" => "model/vrml",
    "xac" => "application/x-gnucash",
    "xbel" => "application/x-xbel",
    "xbm" => "image/x-xbitmap",
    "xcf" => "image/x-xcf",
    "xhtml" => "application/xhtml+xml",
    "xi" => "audio/x-xi",
    "xla" => "application/vnd.ms-excel",
    "xlc" => "application/vnd.ms-excel",
    "xld" => "application/vnd.ms-excel",
    "xll" => "application/vnd.ms-excel",
    "xlm" => "application/vnd.ms-excel",
    "xls" => "application/vnd.ms-excel",
    "xlt" => "application/vnd.ms-excel",
    "xlw" => "application/vnd.ms-excel",
    "xm" => "audio/x-xm",
    "xmi" => "text/x-xmi",
    "xml" => "text/xml",
    "xpm" => "image/x-xpixmap",
    "xsl" => "text/x-xslt",
    "xslfo" => "text/x-xslfo",
    "xslt" => "text/x-xslt",
    "xwd" => "image/x-xwindowdump",
    "z" => "application/x-compress",
    "zabw" => "application/x-abiword",
    "zip" => "application/zip",
    "zoo" => "application/x-zoo"
);

Вообще стандарт MIME-type изначально задумывался для передачи данных по электронной почте, так что эту функцию можно использовать и по прямому назначению - при формировании писем с вложениями для отправки средствами PHP. Но об этом я расскажу в другой раз.
Теги:
MIME
Добавлено: 18 Сентября 2013 02:46:30 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...