Mime type что это
Перейти к содержимому

Mime type что это

  • автор:

Работа с MIME на PHP

Работа с MIME на PHP

«Internet Media Types» или «Медиа типы» — является стандартом RFC 6838, показывающий браузеру формат загружаемого файла. Почти все современные браузеры проверяют MIME-тип файла в качестве основного показателя определения расширения файла. MIME-типы используются при создании корпоративных сайтов и разработке сложных интернет-магазинов где нужно загружать или скачивать документы, прайсы, и другие файлы. MIME-тип состоит из двух частей разделённых косой линией «/», в нижнем регистре и без пробелов Также к медиа типу можно добавить дополнительный параметр для указания например кодировки: text/html; charset=utf-8

Определение MIME-типа загруженного файла

Для того чтобы узнать MIME уже загруженного файла в PHP существует функция mime_content_type().
Для получения MIME-типа изображения используется функция getimagesize():

При написании программных модулей по проверке файлов нельзя полагаться только на проверку MIME, т.к. его значение может быть не всегда правильным. Обычно нужно дополнительно проводить еще онду проверку по расширению, размеру изображения, а лучше для максимальной безопасности пересохранить файл в предполагаемом формате.

Отправка файла через PHP

В PHP, перед отправкой файлов через браузер на уровне клиента, необходимо формировать заголовок Content-Type:
Архив ZIP:
Определяем расширение файла изображения и выводим его с соответствующим заголовоком:

  • PHP
  • Обучение и семинары
  • Интернет-магазин
  • Защита и безопасность

MIME-типы

MIME (Multipurpose Internet Mail Extension, Многоцелевые расширения почты Интернета) — спецификация для передачи по сети файлов различного типа: изображений, музыки, текстов, видео, архивов и др. Указание MIME-типа используется в HTML обычно при передаче данных форм и вставки на страницу различных объектов.

Некоторые популярные MIME-типы и расширения файлов с ними связанных приведены в табл. 1.

Табл. 1. MIME-типы

Расширение файла Тип данных
ai application/postscript
aif audio/aiff
aif audio/x-aiff
aiff audio/aiff
aiff audio/x-aiff
ani application/x-navi-animation
aps application/mime
arc application/octet-stream
art image/x-jg
asf video/x-ms-asf
asm text/x-asm
asp text/asp
asx application/x-mplayer2
asx video/x-ms-asf
asx video/x-ms-asf-plugin
au audio/basic
au audio/x-au
avi video/avi
bin application/mac-binary
bin application/macbinary
bin application/octet-stream
bin application/x-binary
bin application/x-macbinary
bmp image/bmp
boo application/book
book application/book
c text/x-c
c++ text/plain
ccad application/clariscad
class application/java
class application/java-byte-code
class application/x-java-class
com application/octet-stream
com text/plain
conf text/plain
cpp text/x-c
cpt application/mac-compactpro
cpt application/x-compactpro
cpt application/x-cpt
css application/x-pointplus
css text/css
dcr application/x-director
def text/plain
dif video/x-dv
dir application/x-director
dl video/dl
doc application/msword
dot application/msword
drw application/drafting
dvi application/x-dvi
dwg application/acad
dwg image/vnd.dwg
dwg image/x-dwg
dxf application/dxf
dxf image/vnd.dwg
dxf image/x-dwg
dxr application/x-director
exe application/octet-stream
gif image/gif
gz application/x-gzip
gzip application/x-gzip
h text/plain
h text/x-h
hlp application/hlp
hlp application/x-helpfile
hlp application/x-winhelp
htc text/x-component
html text/html
htt text/webviewhtml
ice x-conference/x-cooltalk
ico image/x-icon
inf application/inf
jam audio/x-jam
jav text/plain
jav text/x-java-source
java text/plain
java text/x-java-source
jcm application/x-java-commerce
jpeg image/jpeg
jpg image/jpeg
jps image/x-jps
js application/x-javascript
js application/javascript
js application/ecmascript
js text/javascript
js text/ecmascript
latex application/x-latex
lha application/lha
lha application/octet-stream
lha application/x-lha
lhx application/octet-stream
list text/plain
lsp application/x-lisp
lsp text/x-script.lisp
lst text/plain
lzh application/octet-stream
lzh application/x-lzh
lzx application/lzx
lzx application/octet-stream
lzx application/x-lzx
m3u audio/x-mpequrl
man application/x-troff-man
mid application/x-midi
mid audio/midi
mid audio/x-mid
mid audio/x-midi
mid music/crescendo
mid x-music/x-midi
midi application/x-midi
midi audio/midi
midi audio/x-mid
midi audio/x-midi
midi music/crescendo
midi x-music/x-midi
mod audio/mod
mod audio/x-mod
mov video/quicktime
mp3 audio/mpeg3
mp3 video/mpeg
mp3 video/x-mpeg
mp4 video/mp4
mpa audio/mpeg
mpa video/mpeg
mpeg video/mpeg
mpg audio/mpeg
mpg video/mpeg
mpga audio/mpeg
pas text/pascal
pcl application/vnd.hp-pcl
pcl application/x-pcl
pct image/x-pict
pcx image/x-pcx
pdf application/pdf
pic image/pict
pict image/pict
pl text/plain
pl text/x-script.perl
pm image/x-xpixmap
pm text/x-script.perl-module
pm4 application/x-pagemaker
pm5 application/x-pagemaker
png image/png
pot application/mspowerpoint
pps application/mspowerpoint
ppt application/mspowerpoint
ppt application/powerpoint
ppz application/mspowerpoint
ps application/postscript
psd application/octet-stream
pwz application/vnd.ms-powerpoint
py text/x-script.phyton
pyc applicaiton/x-bytecode.python
qt video/quicktime
qtif image/x-quicktime
ra audio/x-pn-realaudio
ra audio/x-pn-realaudio-plugin
ra audio/x-realaudio
ram audio/x-pn-realaudio
rm application/vnd.rn-realmedia
rm audio/x-pn-realaudio
rpm audio/x-pn-realaudio-plugin
rtf application/rtf
rtf application/x-rtf
rtf text/richtext
rtx application/rtf
rtx text/richtext
rv video/vnd.rn-realvideo
sgml text/sgml
sgml text/x-sgml
sh application/x-bsh
sh application/x-sh
sh application/x-shar
sh text/x-script.sh
shtml text/html
shtml text/x-server-parsed-html
ssi text/x-server-parsed-html
tar application/x-tar
tcl application/x-tcl
tcl text/x-script.tcl
text application/plain
text text/plain
tgz application/gnutar
tgz application/x-compressed
tif image/tiff
tif image/x-tiff
tiff image/tiff
tiff image/x-tiff
txt text/plain
uri text/uri-list
vcd application/x-cdlink
vmd application/vocaltec-media-desc
vrml application/x-vrml
vrml model/vrml
vrml x-world/x-vrml
vsd application/x-visio
vst application/x-visio
vsw application/x-visio
wav audio/wav
wav audio/x-wav
wmf windows/metafile
xla application/excel
xla application/x-excel
xla application/x-msexcel
xlb application/excel
xlb application/vnd.ms-excel
xlb application/x-excel
xlc application/excel
xlc application/vnd.ms-excel
xlc application/x-excel
xld application/excel
xld application/x-excel
xlk application/excel
xlk application/x-excel
xll application/excel
xll application/vnd.ms-excel
xll application/x-excel
xlm application/excel
xlm application/vnd.ms-excel
xlm application/x-excel
xls application/excel
xls application/vnd.ms-excel
xls application/x-excel
xls application/x-msexcel
xlt application/excel
xlt application/x-excel
xlv application/excel
xlv application/x-excel
xlw application/excel
xlw application/vnd.ms-excel
xlw application/x-excel
xlw application/x-msexcel
xm audio/xm
xml application/xml
xml text/xml
z application/x-compress
z application/x-compressed
zip application/x-compressed
zip application/x-zip-compressed
zip application/zip

Браузеры

3 12 1 4 1 1
1 1 6 1

Браузеры

В таблице браузеров применяются следующие обозначения.

  • — элемент полностью поддерживается браузером;
  • — элемент браузером не воспринимается и игнорируется;
  • — при работе возможно появление различных ошибок, либо элемент поддерживается с оговорками.

Число указывает версию браузреа, начиная с которой элемент поддерживается.

Определение MIME-типов

Недавно задался вопросом а сколько байт необходимо для корректного определения mime типа файла. В первую очередь погуглив, полученными ответами не удовлетворился и поэтому решил сам провести маленькое исследование на эту тему.

На изучение данного вопроса меня натолкнула следующая задача: определение MIME-типа файла, находящегося на smb-сервере. Лучшее, что я придумал — копировать кусок файла на локальную машину и потом, по этой части пытаться распознать его MIME-тип.

Для начала расскажу, что я нагуглил и почему мне это не понравилось:

Stack Overflow дает 2 ссылки на википедию:

  1. File Signature говорит, что в большинстве случаев достаточно 2-4 байтов. Однако к сожалению это не так, например, для такого популярного формата, как pdf.
  2. List of signatures приводит некоторый список подписей для файлов разных форматов, но он далеко не полный. Потом нашел File Signatures, здесь вроде как все.
    Однако вернемся все к тому же pdf. Если верить этим источника, то для определения того, что файл является pdf достаточно четырех байт (0x25 0x50 0x44 0x46), однако исходя из первых четырех байтов libmagic говорил, что MIME-тип pdf-файла — text/plain, а из пяти — верное application/pdf. Затрудняюсь точно ответить с чем это связано, надо смотреть исходники.

Теперь давайте перейдем, собственно говоря, к тому, что сделал я. Я написал очень маленькую программку, которая считывала все файлы из одной директории, копировала первые N байт в другую директорию, а затем по частичным копиям полученных файлов пыталась определить, а что это собственно говоря такое было. И так до тех пор, пока MIME-тип части файла не совпадет с MIME-типом оригинала. По результатам работы программа рапортовала, сколько байт понадобилось для определения того или иного типа. Вот ее код:

#include #include #include #include #include #include #include #include #include #include #define TEST_DIR "test-dir/" #define TMP_DIR "tmp-dir/" magic_t cookie; // Detects how many bytes required for correct MIME-type of this file void detect_size(char *filename) < int bytes = 1; int infd, outfd; char strin[100], strout[100], type[100]; char buf[4096]; strcpy(strin, TEST_DIR); strcat(strin, filename); strcpy(strout, TMP_DIR); strcat(strout, filename); while(1) < // Make a copy of given file infd = open(strin, O_RDONLY); outfd = open(strout, O_RDWR | O_CREAT, 00666); read(infd, &buf, bytes); write(outfd, &buf, bytes); lseek(infd, 0, SEEK_SET); lseek(outfd, 0, SEEK_SET); // Detect mime types of old and new const char *mime_type = magic_descriptor(cookie, infd); strcpy(type, mime_type); mime_type = magic_descriptor(cookie, outfd); // Check if mime type detected correctly if (strcmp(mime_type, type) == 0) < printf("%s detected correctly in %d bytes\n", type, bytes); unlink(strout); return; >unlink(strout); bytes++; > > int main() < DIR *dirfd = opendir(TEST_DIR); struct dirent entry, *result = NULL; cookie = magic_open(MAGIC_MIME_TYPE | MAGIC_ERROR); magic_load(cookie, NULL); while(1) < readdir_r(dirfd, &entry, &result); if (result == NULL) break; // No more entries in this directory if (!strcmp(entry.d_name, ".") || !strcmp(entry.d_name, "..")) continue; // Ignore "." and ".." detect_size(entry.d_name); >magic_close(cookie); closedir(dirfd); exit(EXIT_SUCCESS); > 

Потом накидав кучку разных файлов в папку test-dir я начал экспериментировать. Конечно то, что я сделал ни как не тянет на полномасштабное и серьезное исследование, но некоторые результаты все таки интересны. Приведи их краткую сводку:

application/x-sharedlib detected correctly in 18 bytes
application/msword detected correctly in 1793 bytes
image/gif detected correctly in 4 bytes
application/zip detected correctly in 4 bytes
application/x-dosexec detected correctly in 2 bytes
application/vnd.oasis.opendocument.presentation detected correctly in 85 bytes
text/html detected correctly in 14 bytes
image/jpeg detected correctly in 2 bytes
application/x-executable detected correctly in 18 bytes
text/x-makefile detected correctly in 1594 bytes
application/x-executable detected correctly in 18 bytes
application/x-gzip detected correctly in 2 bytes
audio/mpeg detected correctly in 2291 bytes
text/x-c detected correctly in 27 bytes
audio/x-flac detected correctly in 4 bytes
application/pdf detected correctly in 5 bytes

Отмечу некоторые вещи, которые мне показались интересными:

  • Ну во-первых, конечно уже упомянутый pdf, который распознается в 5 байт, а не в 4, как вроде бы следовало ожидать.
  • И напоследок хочется отметить, что не смотря на всю крутость идеи определять тип файла по первым N байтам она, на мой взгляд, провалилась.

Ну это пожалуй все, что я хотел рассказать в этот раз, не люблю много писать. Надеюсь, что это статья окажется кому-нибудь интересной.
Спасибо за внимание.

MIME-типы

MIME (Multipurpose Internet Mail Extension, Многоцелевые расширения почты Интернета) — спецификация для передачи по сети файлов различного типа: изображений, музыки, текстов, видео, архивов и др. Указание MIME-типа используется в HTML обычно при передаче данных форм и вставки на страницу различных объектов.

Некоторые популярные MIME-типы и расширения файлов с ними связанных приведены в табл. 1.

Табл. 1. MIME-типы

Расширение файла Тип данных
ai application/postscript
aif audio/aiff
aif audio/x-aiff
aiff audio/aiff
aiff audio/x-aiff
ani application/x-navi-animation
aos application/x-nokia-9000-communicator-add-on-software
aps application/mime
arc application/octet-stream
arj application/arj
arj application/octet-stream
art image/x-jg
asf video/x-ms-asf
asm text/x-asm
asp text/asp
asx application/x-mplayer2
asx video/x-ms-asf
asx video/x-ms-asf-plugin
au audio/basic
au audio/x-au
avi application/x-troff-msvideo
avi video/avi
avi video/msvideo
avi video/x-msvideo
bin application/mac-binary
bin application/macbinary
bin application/octet-stream
bin application/x-binary
bin application/x-macbinary
bm image/bmp
bmp image/bmp
bmp image/x-windows-bmp
boo application/book
book application/book
c text/x-c
c++ text/plain
ccad application/clariscad
class application/java
class application/java-byte-code
class application/x-java-class
com application/octet-stream
com text/plain
conf text/plain
cpp text/x-c
cpt application/mac-compactpro
cpt application/x-compactpro
cpt application/x-cpt
css application/x-pointplus
css text/css
dcr application/x-director
def text/plain
dif video/x-dv
dir application/x-director
dl video/dl
dl video/x-dl
doc application/msword
dot application/msword
drw application/drafting
dvi application/x-dvi
dwg application/acad
dwg image/vnd.dwg
dwg image/x-dwg
dxf application/dxf
dxf image/vnd.dwg
dxf image/x-dwg
dxr application/x-director
exe application/octet-stream
gif image/gif
gz application/x-compressed
gz application/x-gzip
gzip application/x-gzip
gzip multipart/x-gzip
h text/plain
h text/x-h
hlp application/hlp
hlp application/x-helpfile
hlp application/x-winhelp
htc text/x-component
htm text/html
html text/html
htmls text/html
htt text/webviewhtml
ice x-conference/x-cooltalk
ico image/x-icon
inf application/inf
jam audio/x-jam
jav text/plain
jav text/x-java-source
java text/plain
java text/x-java-source
jcm application/x-java-commerce
jfif image/jpeg
jfif image/pjpeg
jfif-tbnl image/jpeg
jpe image/jpeg
jpe image/pjpeg
jpeg image/jpeg
jpeg image/pjpeg
jpg image/jpeg
jpg image/pjpeg
jps image/x-jps
js application/x-javascript
js application/javascript
js application/ecmascript
js text/javascript
js text/ecmascript
latex application/x-latex
lha application/lha
lha application/octet-stream
lha application/x-lha
lhx application/octet-stream
list text/plain
lsp application/x-lisp
lsp text/x-script.lisp
lst text/plain
lzh application/octet-stream
lzh application/x-lzh
lzx application/lzx
lzx application/octet-stream
lzx application/x-lzx
m3u audio/x-mpequrl
man application/x-troff-man
mid application/x-midi
mid audio/midi
mid audio/x-mid
mid audio/x-midi
mid music/crescendo
mid x-music/x-midi
midi application/x-midi
midi audio/midi
midi audio/x-mid
midi audio/x-midi
midi music/crescendo
midi x-music/x-midi
mod audio/mod
mod audio/x-mod
mov video/quicktime
movie video/x-sgi-movie
mp2 audio/mpeg
mp2 audio/x-mpeg
mp2 video/mpeg
mp2 video/x-mpeg
mp2 video/x-mpeq2a
mp3 audio/mpeg3
mp3 audio/x-mpeg-3
mp3 video/mpeg
mp3 video/x-mpeg
mp4 video/mp4
mpa audio/mpeg
mpa video/mpeg
mpeg video/mpeg
mpg audio/mpeg
mpg video/mpeg
mpga audio/mpeg
pas text/pascal
pcl application/vnd.hp-pcl
pcl application/x-pcl
pct image/x-pict
pcx image/x-pcx
pdf application/pdf
pic image/pict
pict image/pict
pl text/plain
pl text/x-script.perl
pm image/x-xpixmap
pm text/x-script.perl-module
pm4 application/x-pagemaker
pm5 application/x-pagemaker
png image/png
pot application/mspowerpoint
pot application/vnd.ms-powerpoint
ppa application/vnd.ms-powerpoint
pps application/mspowerpoint
pps application/vnd.ms-powerpoint
ppt application/mspowerpoint
ppt application/powerpoint
ppt application/vnd.ms-powerpoint
ppt application/x-mspowerpoint
ppz application/mspowerpoint
ps application/postscript
psd application/octet-stream
pwz application/vnd.ms-powerpoint
py text/x-script.phyton
pyc applicaiton/x-bytecode.python
qt video/quicktime
qtif image/x-quicktime
ra audio/x-pn-realaudio
ra audio/x-pn-realaudio-plugin
ra audio/x-realaudio
ram audio/x-pn-realaudio
rm application/vnd.rn-realmedia
rm audio/x-pn-realaudio
rpm audio/x-pn-realaudio-plugin
rtf application/rtf
rtf application/x-rtf
rtf text/richtext
rtx application/rtf
rtx text/richtext
rv video/vnd.rn-realvideo
sgml text/sgml
sgml text/x-sgml
sh application/x-bsh
sh application/x-sh
sh application/x-shar
sh text/x-script.sh
shtml text/html
shtml text/x-server-parsed-html
ssi text/x-server-parsed-html
tar application/x-tar
tcl application/x-tcl
tcl text/x-script.tcl
text application/plain
text text/plain
tgz application/gnutar
tgz application/x-compressed
tif image/tiff
tif image/x-tiff
tiff image/tiff
tiff image/x-tiff
txt text/plain
uri text/uri-list
vcd application/x-cdlink
vmd application/vocaltec-media-desc
vrml application/x-vrml
vrml model/vrml
vrml x-world/x-vrml
vsd application/x-visio
vst application/x-visio
vsw application/x-visio
wav audio/wav
wav audio/x-wav
wmf windows/metafile
xla application/excel
xla application/x-excel
xla application/x-msexcel
xlb application/excel
xlb application/vnd.ms-excel
xlb application/x-excel
xlc application/excel
xlc application/vnd.ms-excel
xlc application/x-excel
xld application/excel
xld application/x-excel
xlk application/excel
xlk application/x-excel
xll application/excel
xll application/vnd.ms-excel
xll application/x-excel
xlm application/excel
xlm application/vnd.ms-excel
xlm application/x-excel
xls application/excel
xls application/vnd.ms-excel
xls application/x-excel
xls application/x-msexcel
xlt application/excel
xlt application/x-excel
xlv application/excel
xlv application/x-excel
xlw application/excel
xlw application/vnd.ms-excel
xlw application/x-excel
xlw application/x-msexcel
xm audio/xm
xml application/xml
xml text/xml
z application/x-compress
z application/x-compressed
zip application/x-compressed
zip application/x-zip-compressed
zip application/zip
zip multipart/x-zip

Статьи по теме

Не выкладывайте свой код напрямую в комментариях, он отображается некорректно. Воспользуйтесь сервисом cssdeck.com или jsfiddle.net, сохраните код и в комментариях дайте на него ссылку. Так и результат сразу увидят.

Типы тегов

HTML5

Блочные элементы

Строчные элементы

Универсальные элементы

Нестандартные теги

Осуждаемые теги

Видео

Документ

Звук

Изображения

Объекты

Скрипты

Списки

Ссылки

Таблицы

Текст

Форматирование

Формы

Фреймы

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *