本文实例讲述了php准确获取文件MIME类型的方法。分享给大家供大家参考。具体实现方法如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
<?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程序设计有所帮助。