php准确获取文件MIME类型的方法 |
|
本文标签: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;
} 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程序设计有所帮助 。 |