php获得上传文件类型的几种方法
1、mime_content_type()函数判断获取文件类型
mime_content_type返回指定文件的MIME类型,
用法:
1 echomime_content_type('php.gif') ."n";
echomime_content_type('test.php');
输出:
image/gif
text/plain
但是php 5.3.0已经将该函数废弃。如果仍想使用此函数,那么可以对php进行配置启用magic_mime扩展。
2、php Fileinfo 获取文件类型(finfo_open)
PHP官方推荐mime_content_type()的替代函数是Fileinfo函数。PHP 5.3.0+已经默认支持Fileinfo函数(fileinfo support-enabled),不必进行任何配置即可使用finfo_open()判断获取文件MIME类型。
用法代码如下:
- $finfo = finfo_open(FILEINFO_MIME);
- $mimetype = finfo_file($finfo, $filename);
- finfo_close($finfo);
3、image_type_to_mime_type()获取图片类型
如果需要判断MIME类型的文件只有图像文件,那么首先可以使用exif_imagetype()函数获取图像类型常量,再用image_type_to_mime_type()函数将图像类型常量转换成图片文件的MIME类型。
注意:
需要在php.ini中配置打开php_mbstring.dll (Windows需要)和extension=php_exif.dll。
4、php获取上传文件类型
如果使用php上传文件,检测上传文件的MIME类型,则可以使用全局变量$_FILES['uploadfile']['type'],由客户端的浏览器检测获取文件MIME类型。
下面直接上代码,相信略有些php功底的朋友,读来都不成问题,我实现的是仅支持word和pdf文件,且文件大小小于512kb:
- $tmpname = $_FILES ['userfile'] ['tmp_name'];
- if(is_uploaded_file($tmpname)) {
- $mimetype = detectMIME($tmpname);
- $tuozhanming = getFileExt($filename, $mimetype);
- if($tuozhanming == "type_error"){
- echo '仅支持word和pdf文件,且文件大小小于512kb:<a href='.$reurl.'>请重试</a>';
- exit();
- }
- }else{
- $_FILES ['userfile'] ['error'] = 6;
- }
- if ($_FILES ['userfile'] ['error'] > 0) {
- echo 'Problem: ';
- switch ($_FILES ['userfile'] ['error']) {
- case 1 :
- echo '上传文件过大:<a href='.$reurl.'>请重试</a>';
- break;
- case 2 :
- echo '上传文件过大:<a href='.$reurl.'>请重试</a>';
- break;
- case 3 :
- echo '文件上传丢失:<a href='.$reurl.'>请重试</a>';
- break;
- case 4 :
- echo '无文件被上传:<a href='.$reurl.'>请重试</a>';
- break;
- case 6 :
- echo '仅支持word和pdf文件,且文件大小小于512kb:<a href='.$reurl.'>请重试</a>';
- break;
- case 7 :
- echo '上传文件存储失败:<a href='.$reurl.'>请重试</a>';
- break;
- }
- exit ();
- }
- //判断文件类型
- //上传文件
- $_FILES ['userfile'] ['name'] = time () . "." . $tuozhanming;
- $upfile = '../uploads/' . $_FILES ['userfile'] ['name'];
- if ( !move_uploaded_file ( $_FILES ['userfile'] ['tmp_name'], $upfile )) {
- echo 'Problem: 文件移动失败';
- exit ();
- }
- }
- function detectMIME($filename) {
- $file = fopen ( $filename, "rb" );
- $finfo = finfo_open ( FILEINFO_MIME );
- if (! $finfo) {
- // 直接读取文件的前4个字节,根据硬编码判断
- $file = fopen ( $filename, "rb" );
- $bin = fread ( $file, 4 ); //只读文件头4字节
- fclose ( $file );
- $strInfo = @unpack ( "C4chars", $bin );
- //dechex() 函数把十进制转换为十六进制。
- $typeCode = dechex ( $strInfo ['chars1'] ) .
- dechex ( $strInfo ['chars2'] ) .
- dechex ( $strInfo ['chars3'] ) .
- dechex ( $strInfo ['chars4'] );
- $type = '';
- switch ($typeCode) //硬编码值查表
- {
- case "504b34" :
- $type = 'application/zip; charset=binary';
- break;
- case "d0cf11e0" :
- $type = 'application/vnd.ms-office; charset=binary';
- break;
- case "25504446" :
- $type = 'application/pdf; charset=binary';
- break;
- default :
- $type = 'application/vnd.ms-office; charset=binary';
- break;
- }
- } else {
- //finfo_file return information of a file
- $type = finfo_file ( $finfo, $filename );
- }
- return $type;
- function getFileExt($filename, $type) {
- switch ($type) {
- case "application/zip; charset=binary" :
- $extType = "docx";
- break;
- case "application/vnd.ms-office; charset=binary" :
- $extType = "doc";
- break;
- case "application/msword; charset=binary" :
- $extType = "doc";
- break;
- case "application/pdf; charset=binary" :
- $extType = "pdf";
- break;
- default :
- $extType = "type_error";
- break;
- }
- return $extType;
- }
方法五,网上流传一段PHP读取文件头判断文件类型的方法,有一些bug,经我(54chen)修改实测,应该是这个样子:
- /**
- * 读取文件前几个字节 判断文件类型
- *
- * @return String
- */
- function checkTitle($filename) {
- $file = fopen($filename, "rb");
- $bin = fread($file, 2); //只读2字节
- fclose($file);
- $strInfo = @unpack("c2chars", $bin);
- $typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
- $fileType = '';
- switch ($typeCode)
- {
- case 7790:
- $fileType = 'exe';
- break;
- case 7784:
- $fileType = 'midi';
- break;
- case 8297:
- $fileType = 'rar';
- break;
- case 255216:
- $fileType = 'jpg';
- break;
- case 7173:
- $fileType = 'gif';
- break;
- case 6677:
- $fileType = 'bmp';
- break;
- case 13780:
- $fileType = 'png';
- break;
- default:
- $fileType = 'unknown'.$typeCode;
- }
- //Fix
- if ($strInfo['chars1']=='-1' && $strInfo['chars2']=='-40' ) {
- return 'jpg';
- }
- if ($strInfo['chars1']=='-119' && $strInfo['chars2']=='80' ) {
- return 'png';
- }
- return $fileType;
- }
对于上传文件类型的判断,一直没有太好的办法,即使使用上面的代码,也有办法构造假的图片的(如何构造不再传播),有人使用getimagesize来判断,不失为一种好办法:
- if(in_array($attach['ext'], array('jpg', 'jpeg', 'gif', 'png', 'swf', 'bmp')) && function_exists('getimagesize') && !@getimagesize($target)) {
- @unlink($target);
- upload_error('post_attachment_ext_notallowed', $attacharray);
- }
补充:文件类型 值大全:
- 123 application/vnd.lotus-1-2-3
- 3gp video/3gpp
- aab application/x-authoware-bin
- aam application/x-authoware-map
- aas application/x-authoware-seg
- ai application/postscript
- aif audio/x-aiff
- aifc audio/x-aiff
- aiff audio/x-aiff
- als audio/X-Alpha5
- amc application/x-mpeg
- ani application/octet-stream
- asc text/plain
- asd application/astound
- asf video/x-ms-asf
- asn application/astound
- asp application/x-asap
- asx video/x-ms-asf
- au audio/basic
- avb application/octet-stream
- avi video/x-msvideo
- awb audio/amr-wb
- bcpio application/x-bcpio
- bin application/octet-stream
- bld application/bld
- bld2 application/bld2
- bmp application/x-MS-bmp
- bpk application/octet-stream
- bz2 application/x-bzip2
- cal image/x-cals
- ccn application/x-cnc
- cco application/x-cocoa
- cdf application/x-netcdf
- cgi magnus-internal/cgi
- chat application/x-chat
- class application/octet-stream
- clp application/x-msclip
- cmx application/x-cmx
- co application/x-cult3d-object
- cod image/cis-cod
- cpio application/x-cpio
- cpt application/mac-compactpro
- crd application/x-mscardfile
- csh application/x-csh
- csm chemical/x-csml
- csml chemical/x-csml
- css text/css
- cur application/octet-stream
- dcm x-lml/x-evm
- dcr application/x-director
- dcx image/x-dcx
- dhtml text/html
- dir application/x-director
- dll application/octet-stream
- dmg application/octet-stream
- dms application/octet-stream
- doc application/msword
- dot application/x-dot
- dvi application/x-dvi
- dwf drawing/x-dwf
- dwg application/x-autocad
- dxf application/x-autocad
- dxr application/x-director
- ebk application/x-expandedbook
- emb chemical/x-embl-dl-nucleotide
- embl chemical/x-embl-dl-nucleotide
- eps application/postscript
- eri image/x-eri
- es audio/echospeech
- esl audio/echospeech
- etc application/x-earthtime
- etx text/x-setext
- evm x-lml/x-evm
- evy application/x-envoy
- exe application/octet-stream
- fh4 image/x-freehand
- fh5 image/x-freehand
- fhc image/x-freehand
- fif image/fif
- fm application/x-maker
- fpx image/x-fpx
- fvi video/isivideo
- gau chemical/x-gaussian-input
- gca application/x-gca-compressed
- gdb x-lml/x-gdb
- gif image/gif
- gps application/x-gps
- gtar application/x-gtar
- gz application/x-gzip
- hdf application/x-hdf
- hdm text/x-hdml
- hdml text/x-hdml
- hlp application/winhlp
- hqx application/mac-binhex40
- htm text/html
- html text/html
- hts text/html
- ice x-conference/x-cooltalk
- ico application/octet-stream
- ief image/ief
- ifm image/gif
- ifs image/ifs
- imy audio/melody
- ins application/x-NET-Install
- ips application/x-ipscript
- ipx application/x-ipix
- it audio/x-mod
- itz audio/x-mod
- ivr i-world/i-vrml
- j2k image/j2k
- jad text/vnd.sun.j2me.app-descriptor
- jam application/x-jam
- jar application/java-archive
- jnlp application/x-java-jnlp-file
- jpe image/jpeg
- jpeg image/jpeg
- jpg image/jpeg
- jpz image/jpeg
- js application/x-javascript
- jwc application/jwc
- kjx application/x-kjx
- lak x-lml/x-lak
- latex application/x-latex
- lcc application/fastman
- lcl application/x-digitalloca
- lcr application/x-digitalloca
- lgh application/lgh
- lha application/octet-stream
- lml x-lml/x-lml
- lmlpack x-lml/x-lmlpack
- lsf video/x-ms-asf
- lsx video/x-ms-asf
- lzh application/x-lzh
- m13 application/x-msmediaview
- m14 application/x-msmediaview
- m15 audio/x-mod
- m3u audio/x-mpegurl
- m3url audio/x-mpegurl
- ma1 audio/ma1
- ma2 audio/ma2
- ma3 audio/ma3
- ma5 audio/ma5
- man application/x-troff-man
- map magnus-internal/imagemap
- mbd application/mbedlet
- mct application/x-mascot
- mdb application/x-msaccess
- mdz audio/x-mod
- me application/x-troff-me
- mel text/x-vmel
- mi application/x-mif
- mid audio/midi
- midi audio/midi
- mif application/x-mif
- mil image/x-cals
- mio audio/x-mio
- mmf application/x-skt-lbs
- mng video/x-mng
- mny application/x-msmoney
- moc application/x-mocha
- mocha application/x-mocha
- mod audio/x-mod
- mof application/x-yumekara
- mol chemical/x-mdl-molfile
- mop chemical/x-mopac-input
- mov video/quicktime
- movie video/x-sgi-movie
- mp2 audio/x-mpeg
- mp3 audio/x-mpeg
- mp4 video/mp4
- mpc application/vnd.mpohun.certificate
- mpe video/mpeg
- mpeg video/mpeg
- mpg video/mpeg
- mpg4 video/mp4
- mpga audio/mpeg
- mpn application/vnd.mophun.application
- mpp application/vnd.ms-project
- mps application/x-mapserver
- mrl text/x-mrml
- mrm application/x-mrm
- ms application/x-troff-ms
- mts application/metastream
- mtx application/metastream
- mtz application/metastream
- mzv application/metastream
- nar application/zip
- nbmp image/nbmp
- nc application/x-netcdf
- ndb x-lml/x-ndb
- ndwn application/ndwn
- nif application/x-nif
- nmz application/x-scream
- nokia-op-logo image/vnd.nok-oplogo-color
- npx application/x-netfpx
- nsnd audio/nsnd
- nva application/x-neva1
- oda application/oda
- oom application/x-AtlasMate-Plugin
- pac audio/x-pac
- pae audio/x-epac
- pan application/x-pan
- pbm image/x-portable-bitmap
- pcx image/x-pcx
- pda image/x-pda
- pdb chemical/x-pdb
- pdf application/pdf
- pfr application/font-tdpfr
- pgm image/x-portable-graymap
- pict image/x-pict
- pm application/x-perl
- pmd application/x-pmd
- png image/png
- pnm image/x-portable-anymap
- pnz image/png
- pot application/vnd.ms-powerpoint
- ppm image/x-portable-pixmap
- pps application/vnd.ms-powerpoint
- ppt application/vnd.ms-powerpoint
- pqf application/x-cprplayer
- pqi application/cprplayer
- prc application/x-prc
- proxy application/x-ns-proxy-autoconfig
- ps application/postscript
- ptlk application/listenup
- pub application/x-mspublisher
- pvx video/x-pv-pvx
- qcp audio/vnd.qcelp
- qt video/quicktime
- qti image/x-quicktime
- qtif image/x-quicktime
- r3t text/vnd.rn-realtext3d
- ra audio/x-pn-realaudio
- ram audio/x-pn-realaudio
- rar application/x-rar-compressed
- ras image/x-cmu-raster
- rdf application/rdf+xml
- rf image/vnd.rn-realflash
- rgb image/x-rgb
- rlf application/x-richlink
- rm audio/x-pn-realaudio
- rmf audio/x-rmf
- rmm audio/x-pn-realaudio
- rmvb audio/x-pn-realaudio
- rnx application/vnd.rn-realplayer
- roff application/x-troff
- rp image/vnd.rn-realpix
- rpm audio/x-pn-realaudio-plugin
- rt text/vnd.rn-realtext
- rte x-lml/x-gps
- rtf application/rtf
- rtg application/metastream
- rtx text/richtext
- rv video/vnd.rn-realvideo
- rwc application/x-rogerwilco
- s3m audio/x-mod
- s3z audio/x-mod
- sca application/x-supercard
- scd application/x-msschedule
- sdf application/e-score
- sea application/x-stuffit
- sgm text/x-sgml
- sgml text/x-sgml
- sh application/x-sh
- shar application/x-shar
- shtml magnus-internal/parsed-html
- shw application/presentations
- si6 image/si6
- si7 image/vnd.stiwap.sis
- si9 image/vnd.lgtwap.sis
- sis application/vnd.symbian.install
- sit application/x-stuffit
- skd application/x-Koan
- skm application/x-Koan
- skp application/x-Koan
- skt application/x-Koan
- slc application/x-salsa
- smd audio/x-smd
- smi application/smil
- smil application/smil
- smp application/studiom
- smz audio/x-smd
- snd audio/basic
- spc text/x-speech
- spl application/futuresplash
- spr application/x-sprite
- sprite application/x-sprite
- spt application/x-spt
- src application/x-wais-source
- stk application/hyperstudio
- stm audio/x-mod
- sv4cpio application/x-sv4cpio
- sv4crc application/x-sv4crc
- svf image/vnd
- svg image/svg-xml
- svh image/svh
- svr x-world/x-svr
- swf application/x-shockwave-flash
- swfl application/x-shockwave-flash
- t application/x-troff
- tad application/octet-stream
- talk text/x-speech
- tar application/x-tar
- taz application/x-tar
- tbp application/x-timbuktu
- tbt application/x-timbuktu
- tcl application/x-tcl
- tex application/x-tex
- texi application/x-texinfo
- texinfo application/x-texinfo
- tgz application/x-tar
- thm application/vnd.eri.thm
- tif image/tiff
- tiff image/tiff
- tki application/x-tkined
- tkined application/x-tkined
- toc application/toc
- toy image/toy
- tr application/x-troff
- trk x-lml/x-gps
- trm application/x-msterminal
- tsi audio/tsplayer
- tsp application/dsptype
- tsv text/tab-separated-values
- tsv text/tab-separated-values
- ttf application/octet-stream
- ttz application/t-time
- txt text/plain
- ult audio/x-mod
- ustar application/x-ustar
- uu application/x-uuencode
- uue application/x-uuencode
- vcd application/x-cdlink
- vcf text/x-vcard
- vdo video/vdo
- vib audio/vib
- viv video/vivo
- vivo video/vivo
- vmd application/vocaltec-media-desc
- vmf application/vocaltec-media-file
- vmi application/x-dreamcast-vms-info
- vms application/x-dreamcast-vms
- vox audio/voxware
- vqe audio/x-twinvq-plugin
- vqf audio/x-twinvq
- vql audio/x-twinvq
- vre x-world/x-vream
- vrml x-world/x-vrml
- vrt x-world/x-vrt
- vrw x-world/x-vream
- vts workbook/formulaone
- wav audio/x-wav
- wax audio/x-ms-wax
- wbmp image/vnd.wap.wbmp
- web application/vnd.xara
- wi image/wavelet
- wis application/x-InstallShield
- wm video/x-ms-wm
- wma audio/x-ms-wma
- wmd application/x-ms-wmd
- wmf application/x-msmetafile
- wml text/vnd.wap.wml
- wmlc application/vnd.wap.wmlc
- wmls text/vnd.wap.wmlscript
- wmlsc application/vnd.wap.wmlscriptc
- wmlscript text/vnd.wap.wmlscript
- wmv audio/x-ms-wmv
- wmx video/x-ms-wmx
- wmz application/x-ms-wmz
- wpng image/x-up-wpng
- wpt x-lml/x-gps
- wri application/x-mswrite
- wrl x-world/x-vrml
- wrz x-world/x-vrml
- ws text/vnd.wap.wmlscript
- wsc application/vnd.wap.wmlscriptc
- wv video/wavelet
- wvx video/x-ms-wvx
- wxl application/x-wxl
- x-gzip application/x-gzip
- xar application/vnd.xara
- xbm image/x-xbitmap
- xdm application/x-xdma
- xdma application/x-xdma
- xdw application/vnd.fujixerox.docuworks
- xht application/xhtml+xml
- xhtm application/xhtml+xml
- xhtml application/xhtml+xml
- xla application/vnd.ms-excel
- xlc application/vnd.ms-excel
- xll application/x-excel
- xlm application/vnd.ms-excel
- xls application/vnd.ms-excel
- xlt application/vnd.ms-excel
- xlw application/vnd.ms-excel
- xm audio/x-mod
- xml text/xml
- xmz audio/x-mod
- xpi application/x-xpinstall
- xpm image/x-xpixmap
- xsit text/xml
- xsl text/xml
- xul text/xul
- xwd image/x-xwindowdump
- xyz chemical/x-pdb
- yz1 application/x-yz1
- z application/x-compress
- zac application/x-zaurus-zac
- zip application/zip