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, "."))); } }