mime.inc.php
3.79 KB
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
<?php
/**
* This is a temporary location for these functions.
*/
class KTMime {
/**
* Get the mime type primary key for a specific mime type
*
* @param string detected mime type
* @param string filename
* @return int mime type primary key if found, else default mime type primary key (text/plain)
*/
function getMimeTypeID($sMimeType, $sFileName) {
global $default;
$sql = $default->db;
$bOfficeDocument = false;
// application/msword seems to be set by all Office documents
if ($sMimeType == "application/msword") {
$bOfficeDocument = true;
}
if ($bOfficeDocument || (!$sMimeType)) {
// check by file extension
$sExtension = KTMime::stripAllButExtension($sFileName);
$sql->query(array("SELECT id FROM " . $default->mimetypes_table . " WHERE LOWER(filetypes) = ?", $sExtension));/*ok*/
if ($sql->next_record()) {
return $sql->f("id");
}
}
// get the mime type id
if (isset($sMimeType)) {
$sql->query(array("SELECT id FROM " . $default->mimetypes_table . " WHERE mimetypes = ?", $sMimeType));/*ok*/
if ($sql->next_record()) {
return $sql->f("id");
}
}
//otherwise return the default mime type
return KTMime::getDefaultMimeTypeID();
}
/**
* Get the default mime type, which is application/octet-stream
*
* @return int default mime type
*
*/
function getDefaultMimeTypeID() {
global $default;
$sql = $default->db;
$sql->query("SELECT id FROM " . $default->mimetypes_table . " WHERE mimetypes = 'application/octet-stream'");
$sql->next_record();
//get the mime type id
return $sql->f("id");
}
function getMimeTypeName($iMimeTypeID) {
global $default;
$sql = $default->db;
$sql->query(array("SELECT mimetypes FROM " . $default->mimetypes_table . " WHERE id = ?", $iMimeTypeID));/*ok*/
if ($sql->next_record()) {
return $sql->f("mimetypes");
}
return "application/octet-stream";
}
/**
* Try well-defined methods for getting the MIME type for a file on disk.
* First try PECL's Fileinfo library, then try mime_content_type() builtin.
* If neither are available, returns NULL.
*
* @param string file on disk
* @return string mime time for given filename, or NULL
*/
function getMimeTypeFromFile($sFileName) {
if (extension_loaded('fileinfo')) {
$res = finfo_open(FILEINFO_MIME);
$sType = finfo_file($res, $sFileName);
}
if (!$sType && function_exists('mime_content_type')) {
$sFile = ini_get('mime_magic.magicfile');
if (file_exists($sFile)) {
$sType = mime_content_type($sFileName);
}
}
if (!$sType) {
if (file_exists('/usr/bin/file')) {
$aCmd = array('/usr/bin/file', '-bi', $sFileName);
$sCmd = KTUtil::safeShellString($aCmd);
$sPossibleType = @exec($sCmd);
if (preg_match('#^[^/]+/[^/*]+$#', $sPossibleType)) {
$sType = $sPossibleType;
}
}
}
if ($sType) {
return preg_replace('/;.*$/', '', $sType);
}
return null;
}
/**
* Strip all but the extension from a file. For instance, input of
* 'foo.tif' would return 'tif'.
*
* @param string filename
* @return string extension for given file, without filename itself
*/
function stripAllButExtension($sFileName) {
return strtolower(substr($sFileName, strrpos($sFileName, ".")+1, strlen($sFileName) - strrpos($sFileName, ".")));
}
}