``` <?php // 精准获取文件的MIME类型 $mime \= array( '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'; } else if (function\_exists('mime\_content\_type')) { return 'mime\_content\_type'; } else if ( function\_exists('exec')) { $result \= exec('file -ib '.escapeshellarg(\_\_FILE\_\_)); if ( 0 \=== strpos($result, 'text/x-php') OR 0 \=== strpos($result, 'text/x-c++')) { return 'linux'; } $result \= exec('file -Ib '.escapeshellarg(\_\_FILE\_\_)); if ( 0 \=== strpos($result, 'text/x-php') OR 0 \=== strpos($result, 'text/x-c++')) { return 'bsd'; } } return 'internal'; } function \_getMimeType($path) { $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($this\->mime\[$ext\]) ? $this\->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($this\->mime\[$ext\])) { $type\[0\] \= $this\->mime\[$ext\]; } } return $type\[0\]; } ```