本文实例讲述了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\';
} 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) {
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));
/*End of php*/
希望本文所述对大家的php程序设计有所帮助。
本文地址:https://www.stayed.cn/item/24804
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我