本文实例讲述了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程序设计有所帮助。