Categorias

Como definir os mime types válidos de um tipo de arquivo

Vou mostrar uma solução que encontrei para facilitar minha vida na hora de definir os mime types que poderão ser aceitos pelo sistema na hora de salvar um arquivo enviado por upload. Apresenta a lista completa de mime types disponíveis.

Funciona a partir do PHP 5.3.0.

Primeiro vou criar um arquivo que conterá todos as extensões existentes e seus respectivos mime types.

O nome do arquivo é apenas MimeTypes, isso mesmo, sem extensão, apenas MimeTypes.


MimeTypes:
# The list of Mime Types(actualized in 2011-10-15)
#
# The format is 2 columns:
#    Column #1: Extension
#    Column #2: MIME type
#------------------------------------------------------------------------------

.3dm                x-world/x-3dmf
.3dmf               x-world/x-3dmf
.a                  application/octet-stream
.aab                application/x-authorware-bin
.aam                application/x-authorware-map
.aas                application/x-authorware-seg
.abc                text/vnd.abc
.acgi               text/html
.afl                video/animaflex
.ai                 application/postscript
.aif                audio/aiff
.aif                audio/x-aiff
.aifc               audio/aiff
.aifc               audio/x-aiff
.aiff               audio/aiff
.aiff               audio/x-aiff
.aim                application/x-aim
.aip                text/x-audiosoft-intra
.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
.avs                video/avs-video
.bcpio              application/x-bcpio
.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
.boz                application/x-bzip2
.bsh                application/x-bsh
.bz                 application/x-bzip
.bz2                application/x-bzip2
.c                  text/plain
.c                  text/x-c
.c++                text/plain
.cat                application/vnd.ms-pki.seccat
.cc                 text/plain
.cc                 text/x-c
.ccad               application/clariscad
.cco                application/x-cocoa
.cdf                application/cdf
.cdf                application/x-cdf
.cdf                application/x-netcdf
.cer                application/pkix-cert
.cer                application/x-x509-ca-cert
.cha                application/x-chat
.chat               application/x-chat
.class              application/java
.class              application/java-byte-code
.class              application/x-java-class
.com                application/octet-stream
.com                text/plain
.conf               text/plain
.cpio               application/x-cpio
.cpp                text/x-c
.cpt                application/mac-compactpro
.cpt                application/x-compactpro
.cpt                application/x-cpt
.crl                application/pkcs-crl
.crl                application/pkix-crl
.crt                application/pkix-cert
.crt                application/x-x509-ca-cert
.crt                application/x-x509-user-cert
.csh                application/x-csh
.csh                text/x-script.csh
.css                application/x-pointplus
.css                text/css
.cxx                text/plain
.dcr                application/x-director
.deepv              application/x-deepv
.def                text/plain
.der                application/x-x509-ca-cert
.dif                video/x-dv
.dir                application/x-director
.dl                 video/dl
.dl                 video/x-dl
.doc                application/msword
.dot                application/msword
.dp                 application/commonground
.drw                application/drafting
.dump               application/octet-stream
.dv                 video/x-dv
.dvi                application/x-dvi
.dwf                drawing/x-dwf
.dwf                model/vnd.dwf
.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
.el                 text/x-script.elisp
.elc                application/x-bytecode.elisp
.elc                application/x-elc
.env                application/x-envoy
.eps                application/postscript
.es                 application/x-esrehber
.etx                text/x-setext
.evy                application/envoy
.evy                application/x-envoy
.exe                application/octet-stream
.f                  text/plain
.f                  text/x-fortran
.f77                text/x-fortran
.f90                text/plain
.f90                text/x-fortran
.fdf                application/vnd.fdf
.fif                application/fractals
.fif                image/fif
.fli                video/fli
.fli                video/x-fli
.flo                image/florian
.flv                flv-application/octet-stream
.flx                text/vnd.fmi.flexstor
.fmf                video/x-atomic3d-feature
.for                text/plain
.for                text/x-fortran
.fpx                image/vnd.fpx
.fpx                image/vnd.net-fpx
.frl                application/freeloader
.funk               audio/make
.g                  text/plain
.g3                 image/g3fax
.gif                image/gif
.gl                 video/gl
.gl                 video/x-gl
.gsd                audio/x-gsm
.gsm                audio/x-gsm
.gsp                application/x-gsp
.gss                application/x-gss
.gtar               application/x-gtar
.gz                 application/x-compressed
.gz                 application/x-gzip
.gzip               application/x-gzip
.gzip               multipart/x-gzip
.h                  text/plain
.h                  text/x-h
.hdf                application/x-hdf
.help               application/x-helpfile
.hgl                application/vnd.hp-hpgl
.hh                 text/plain
.hh                 text/x-h
.hlb                text/x-script
.hlp                application/hlp
.hlp                application/x-helpfile
.hlp                application/x-winhelp
.hpg                application/vnd.hp-hpgl
.hpgl               application/vnd.hp-hpgl
.hqx                application/binhex
.hqx                application/binhex4
.hqx                application/mac-binhex
.hqx                application/mac-binhex40
.hqx                application/x-binhex40
.hqx                application/x-mac-binhex40
.hta                application/hta
.htc                text/x-component
.htm                text/html
.html               text/html
.htmls              text/html
.htt                text/webviewhtml
.htx                text/html
.ice                x-conference/x-cooltalk
.ico                image/x-icon
.idc                text/plain
.ief                image/ief
.iefs               image/ief
.iges               application/iges
.iges               model/iges
.igs                application/iges
.igs                model/iges
.ima                application/x-ima
.imap               application/x-httpd-imap
.inf                application/inf
.ins                application/x-internett-signup
.ip                 application/x-ip2
.isu                video/x-isvideo
.it                 audio/it
.iv                 application/x-inventor
.ivr                i-world/i-vrml
.ivy                application/x-livescreen
.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
.jut                image/jutvision
.kar                audio/midi
.kar                music/x-karaoke
.ksh                application/x-ksh
.ksh                text/x-script.ksh
.la                 audio/nspaudio
.la                 audio/x-nspaudio
.lam                audio/x-liveaudio
.latex              application/x-latex
.lha                application/lha
.lha                application/octet-stream
.lha                application/x-lha
.lhx                application/octet-stream
.list               text/plain
.lma                audio/nspaudio
.lma                audio/x-nspaudio
.log                text/plain
.lsp                application/x-lisp
.lsp                text/x-script.lisp
.lst                text/plain
.lsx                text/x-la-asf
.ltx                application/x-latex
.lzh                application/octet-stream
.lzh                application/x-lzh
.lzx                application/lzx
.lzx                application/octet-stream
.lzx                application/x-lzx
.m                  text/plain
.m                  text/x-m
.m1v                video/mpeg
.m2a                audio/mpeg
.m2v                video/mpeg
.m3u                audio/x-mpequrl
.man                application/x-troff-man
.map                application/x-navimap
.mar                text/plain
.mbd                application/mbedlet
.mc$                application/x-magic-cap-package-1.0
.mcd                application/mcad
.mcd                application/x-mathcad
.mcf                image/vasa
.mcf                text/mcf
.mcp                application/netmc
.me                 application/x-troff-me
.mht                message/rfc822
.mhtml              message/rfc822
.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
.mif                application/x-frame
.mif                application/x-mif
.mime               message/rfc822
.mime               www/mime
.mjf                audio/x-vnd.audioexplosion.mjuicemediafile
.mjpg               video/x-motion-jpeg
.mm                 application/base64
.mm                 application/x-meme
.mme                application/base64
.mod                audio/mod
.mod                audio/x-mod
.moov               video/quicktime
.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
.mpa                audio/mpeg
.mpa                video/mpeg
.mpc                application/x-project
.mpe                video/mpeg
.mpeg               video/mpeg
.mpg                audio/mpeg
.mpg                video/mpeg
.mpga               audio/mpeg
.mpp                application/vnd.ms-project
.mpt                application/x-project
.mpv                application/x-project
.mpx                application/x-project
.mrc                application/marc
.ms                 application/x-troff-ms
.mv                 video/x-sgi-movie
.my                 audio/make
.mzz                application/x-vnd.audioexplosion.mzz
.nap                image/naplps
.naplps             image/naplps
.nc                 application/x-netcdf
.ncm                application/vnd.nokia.configuration-message
.nif                image/x-niff
.niff               image/x-niff
.nix                application/x-mix-transfer
.nsc                application/x-conference
.nvd                application/x-navidoc
.o                  application/octet-stream
.oda                application/oda
.omc                application/x-omc
.omcd               application/x-omcdatamaker
.omcr               application/x-omcregerator
.p                  text/x-pascal
.p10                application/pkcs10
.p10                application/x-pkcs10
.p12                application/pkcs-12
.p12                application/x-pkcs12
.p7a                application/x-pkcs7-signature
.p7c                application/pkcs7-mime
.p7c                application/x-pkcs7-mime
.p7m                application/pkcs7-mime
.p7m                application/x-pkcs7-mime
.p7r                application/x-pkcs7-certreqresp
.p7s                application/pkcs7-signature
.part               application/pro_eng
.pas                text/pascal
.pbm                image/x-portable-bitmap
.pcl                application/vnd.hp-pcl
.pcl                application/x-pcl
.pct                image/x-pict
.pcx                image/x-pcx
.pdb                chemical/x-pdb
.pdf                application/pdf
.pfunk              audio/make
.pfunk              audio/make.my.funk
.pgm                image/x-portable-graymap
.pgm                image/x-portable-greymap
.pic                image/pict
.pict               image/pict
.pkg                application/x-newton-compatible-pkg
.pko                application/vnd.ms-pki.pko
.pl                 text/plain
.pl                 text/x-script.perl
.plx                application/x-pixclscript
.pm                 image/x-xpixmap
.pm                 text/x-script.perl-module
.pm4                application/x-pagemaker
.pm5                application/x-pagemaker
.png                image/png
.pnm                application/x-portable-anymap
.pnm                image/x-portable-anymap
.pot                application/mspowerpoint
.pot                application/vnd.ms-powerpoint
.pov                model/x-pov
.ppa                application/vnd.ms-powerpoint
.ppm                image/x-portable-pixmap
.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
.pre                application/x-freelance
.prt                application/pro_eng
.ps                 application/postscript
.psd                application/octet-stream
.pvu                paleovu/x-pv
.pwz                application/vnd.ms-powerpoint
.py                 text/x-script.phyton
.pyc                applicaiton/x-bytecode.python
.qcp                audio/vnd.qcelp
.qd3                x-world/x-3dmf
.qd3d               x-world/x-3dmf
.qif                image/x-quicktime
.qt                 video/quicktime
.qtc                video/x-qtc
.qti                image/x-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
.ras                application/x-cmu-raster
.ras                image/cmu-raster
.ras                image/x-cmu-raster
.rast               image/cmu-raster
.rexx               text/x-script.rexx
.rf                 image/vnd.rn-realflash
.rgb                image/x-rgb
.rm                 application/vnd.rn-realmedia
.rm                 audio/x-pn-realaudio
.rmi                audio/mid
.rmm                audio/x-pn-realaudio
.rmp                audio/x-pn-realaudio
.rmp                audio/x-pn-realaudio-plugin
.rng                application/ringing-tones
.rng                application/vnd.nokia.ringing-tone
.rnx                application/vnd.rn-realplayer
.roff               application/x-troff
.rp                 image/vnd.rn-realpix
.rpm                audio/x-pn-realaudio-plugin
.rt                 text/richtext
.rt                 text/vnd.rn-realtext
.rtf                application/rtf
.rtf                application/x-rtf
.rtf                text/richtext
.rtx                application/rtf
.rtx                text/richtext
.rv                 video/vnd.rn-realvideo
.s                  text/x-asm
.s3m                audio/s3m
.saveme             application/octet-stream
.sbk                application/x-tbook
.scm                application/x-lotusscreencam
.scm                text/x-script.guile
.scm                text/x-script.scheme
.scm                video/x-scm
.sdml               text/plain
.sdp                application/sdp
.sdp                application/x-sdp
.sdr                application/sounder
.sea                application/sea
.sea                application/x-sea
.set                application/set
.sgm                text/sgml
.sgm                text/x-sgml
.sgml               text/sgml
.sgml               text/x-sgml
.sh                 application/x-bsh
.sh                 application/x-sh
.sh                 application/x-shar
.sh                 text/x-script.sh
.shar               application/x-bsh
.shar               application/x-shar
.shtml              text/html
.shtml              text/x-server-parsed-html
.sid                audio/x-psid
.sit                application/x-sit
.sit                application/x-stuffit
.skd                application/x-koan
.skm                application/x-koan
.skp                application/x-koan
.skt                application/x-koan
.sl                 application/x-seelogo
.smi                application/smil
.smil               application/smil
.snd                audio/basic
.snd                audio/x-adpcm
.sol                application/solids
.spc                application/x-pkcs7-certificates
.spc                text/x-speech
.spl                application/futuresplash
.spr                application/x-sprite
.sprite             application/x-sprite
.src                application/x-wais-source
.ssi                text/x-server-parsed-html
.ssm                application/streamingmedia
.sst                application/vnd.ms-pki.certstore
.step               application/step
.stl                application/sla
.stl                application/vnd.ms-pki.stl
.stl                application/x-navistyle
.stp                application/step
.sv4cpio            application/x-sv4cpio
.sv4crc             application/x-sv4crc
.svf                image/vnd.dwg
.svf                image/x-dwg
.svr                application/x-world
.svr                x-world/x-svr
.swf                application/x-shockwave-flash
.t                  application/x-troff
.talk               text/x-speech
.tar                application/x-tar
.tbk                application/toolbook
.tbk                application/x-tbook
.tcl                application/x-tcl
.tcl                text/x-script.tcl
.tcsh               text/x-script.tcsh
.tex                application/x-tex
.texi               application/x-texinfo
.texinfo            application/x-texinfo
.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
.tr                 application/x-troff
.tsi                audio/tsp-audio
.tsp                application/dsptype
.tsp                audio/tsplayer
.tsv                text/tab-separated-values
.turbot             image/florian
.txt                text/plain
.uil                text/x-uil
.uni                text/uri-list
.unis               text/uri-list
.unv                application/i-deas
.uri                text/uri-list
.uris               text/uri-list
.ustar              application/x-ustar
.ustar              multipart/x-ustar
.uu                 application/octet-stream
.uu                 text/x-uuencode
.uue                text/x-uuencode
.vcd                application/x-cdlink
.vcs                text/x-vcalendar
.vda                application/vda
.vdo                video/vdo
.vew                application/groupwise
.viv                video/vivo
.viv                video/vnd.vivo
.vivo               video/vivo
.vivo               video/vnd.vivo
.vmd                application/vocaltec-media-desc
.vmf                application/vocaltec-media-file
.voc                audio/voc
.voc                audio/x-voc
.vos                video/vosaic
.vox                audio/voxware
.vqe                audio/x-twinvq-plugin
.vqf                audio/x-twinvq
.vql                audio/x-twinvq-plugin
.vrml               application/x-vrml
.vrml               model/vrml
.vrml               x-world/x-vrml
.vrt                x-world/x-vrt
.vsd                application/x-visio
.vst                application/x-visio
.vsw                application/x-visio
.w60                application/wordperfect6.0
.w61                application/wordperfect6.1
.w6w                application/msword
.wav                audio/wav
.wav                audio/x-wav
.wb1                application/x-qpro
.wbmp               image/vnd.wap.wbmp
.web                application/vnd.xara
.wiz                application/msword
.wk1                application/x-123
.wmf                windows/metafile
.wml                text/vnd.wap.wml
.wmlc               application/vnd.wap.wmlc
.wmls               text/vnd.wap.wmlscript
.wmlsc              application/vnd.wap.wmlscriptc
.word               application/msword
.wp                 application/wordperfect
.wp5                application/wordperfect
.wp5                application/wordperfect6.0
.wp6                application/wordperfect
.wpd                application/wordperfect
.wpd                application/x-wpwin
.wq1                application/x-lotus
.wri                application/mswrite
.wri                application/x-wri
.wrl                application/x-world
.wrl                model/vrml
.wrl                x-world/x-vrml
.wrz                model/vrml
.wrz                x-world/x-vrml
.wsc                text/scriplet
.wsrc               application/x-wais-source
.wtk                application/x-wintalk
.xbm                image/x-xbitmap
.xbm                image/x-xbm
.xbm                image/xbm
.xdr                video/x-amt-demorun
.xgz                xgl/drawing
.xif                image/vnd.xiff
.xl                 application/excel
.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
.xmz                xgl/movie
.xpix               application/x-vnd.ls-xpix
.xpm                image/x-xpixmap
.xpm                image/xpm
.x-png              image/png
.xsr                video/x-amt-showrun
.xwd                image/x-xwd
.xwd                image/x-xwindowdump
.xyz                chemical/x-pdb
.z                  application/x-compress
.z                  application/x-compressed
.zip                application/x-compressed
.zip                application/x-zip-compressed
.zip                application/zip
.zip                multipart/x-zip
.zoo                application/octet-stream
.zsh                text/x-script.zsh


Agora o script que irá buscar os mime types corretos para cada extensão informada.


Teste:
file( 'Chibi_Kakashi.jpg' ); // aqui vai o $file[ 'tmp_name' ];

// Pega os mime types associados a cada extensão permitida
$mime_types_permitidos = getMimeTypes( array( 'jpg', 'gif' ) );

if( in_array( $mime_type_arquivo, $mime_types_permitidos ) )
{
    echo 'Arquivo válido!';
}
else
{
    echo 'Arquivo negado!';
}

?>