php准确获取文件MIME类型的方法
本文实例讲述了php准确获取文件MIME类型的方法。分享给大家供大家参考。具体实现方法如下:
<?php $mime=array( //applications 'ai'=>'application/postscript', 'eps'=>'application/postscript', 'exe'=>'application/octet-stream', 'doc'=>'application/vnd.ms-word', 'xls'=>'application/vnd.ms-excel', 'ppt'=>'application/vnd.ms-powerpoint', 'pps'=>'application/vnd.ms-powerpoint', 'pdf'=>'application/pdf', 'xml'=>'application/xml', 'odt'=>'application/vnd.oasis.opendocument.text', 'swf'=>'application/x-shockwave-flash', //archives 'gz'=>'application/x-gzip', 'tgz'=>'application/x-gzip', 'bz'=>'application/x-bzip2', 'bz2'=>'application/x-bzip2', 'tbz'=>'application/x-bzip2', 'zip'=>'application/zip', 'rar'=>'application/x-rar', 'tar'=>'application/x-tar', '7z'=>'application/x-7z-compressed', //texts 'txt'=>'text/plain', 'php'=>'text/x-php', 'html'=>'text/html', 'htm'=>'text/html', 'js'=>'text/javascript', 'css'=>'text/css', 'rtf'=>'text/rtf', 'rtfd'=>'text/rtfd', 'py'=>'text/x-python', 'java'=>'text/x-java-source', 'rb'=>'text/x-ruby', 'sh'=>'text/x-shellscript', 'pl'=>'text/x-perl', 'sql'=>'text/x-sql', //images 'bmp'=>'image/x-ms-bmp', 'jpg'=>'image/jpeg', 'jpeg'=>'image/jpeg', 'gif'=>'image/gif', 'png'=>'image/png', 'tif'=>'image/tiff', 'tiff'=>'image/tiff', 'tga'=>'image/x-targa', 'psd'=>'image/vnd.adobe.photoshop', //audio 'mp3'=>'audio/mpeg', 'mid'=>'audio/midi', 'ogg'=>'audio/ogg', 'mp4a'=>'audio/mp4', 'wav'=>'audio/wav', 'wma'=>'audio/x-ms-wma', //video 'avi'=>'video/x-msvideo', 'dv'=>'video/x-dv', 'mp4'=>'video/mp4', 'mpeg'=>'video/mpeg', 'mpg'=>'video/mpeg', 'mov'=>'video/quicktime', 'wm'=>'video/x-ms-wmv', 'flv'=>'video/x-flv', 'mkv'=>'video/x-matroska' ); function_getMimeDetect(){ if(class_exists('finfo')){ return'finfo'; }elseif(function_exists('mime_content_type')){ return'mime_content_type'; }elseif(function_exists('exec')){ $result=exec('file-ib'.escapeshellarg(__FILE__)); if(0===strpos($result,'text/x-php')OR0===strpos($result,'text/x-c++')){ return'linux'; } $result=exec('file-Ib'.escapeshellarg(__FILE__)); if(0===strpos($result,'text/x-php')OR0===strpos($result,'text/x-c++')){ return'bsd'; } } return'internal'; } function_getMimeType($path){ global$mime; $fmime=_getMimeDetect(); switch($fmime){ case'finfo': $finfo=finfo_open(FILEINFO_MIME); if($finfo) $type=@finfo_file($finfo,$path); break; case'mime_content_type': $type=mime_content_type($path); break; case'linux': $type=exec('file-ib'.escapeshellarg($path)); break; case'bsd': $type=exec('file-Ib'.escapeshellarg($path)); break; default: $pinfo=pathinfo($path); $ext=isset($pinfo['extension'])?strtolower($pinfo['extension']):''; $type=isset($mime[$ext])?$mime[$ext]:'unkown'; break; } $type=explode(';',$type); //需要加上这段,因为如果使用mime_content_type函数来获取一个不存在的$path时会返回'application/octet-stream' if($fmime!='internal'AND$type[0]=='application/octet-stream'){ $pinfo=pathinfo($path); $ext=isset($pinfo['extension'])?strtolower($pinfo['extension']):''; if(!empty($ext)AND!empty($mime[$ext])){ $type[0]=$mime[$ext]; } } return$type[0]; } $path='1.txt';//实际上当前路径并不存在1.txt var_dump(_getMimeType($path)); /*Endofphp*/
希望本文所述对大家的php程序设计有所帮助。