PHP头条
热点:

php准确获取文件MIME类型的方法


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

www.phpzy.comtrue/php/26706.htmlTechArticlephp准确获取文件MIME类型的方法 本文实例讲述了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...

相关文章

    暂无相关文章

PHP之友评论

今天推荐