/** * Returns the mime type of an path by resolving it agains a apache style "mime.types" file. * * @param string $path path to Map/get content type by * @param String $mimeFile Absolute filepath to mime.types style file. * @return String mime type of path or an empty string on failue. */ public static function get($path, $mimeFile = "") { $mime = ""; $path = explode('.', $path); $ext = strtolower(array_pop($path)); // Use cached mime type if (isset(self::$mimes[$ext])) { return self::$mimes[$ext]; } // No mime type file specified if ($mimeFile === "") { $mimeFile = dirname(__FILE__) . '/mimes.txt'; } // Open mime file and start parsing it if ($fp = fopen($mimeFile, "r")) { // Seek to last location if (self::$lastMimeFile === $mimeFile) { fseek($fp, self::$pos, SEEK_SET); } while (!feof($fp)) { $line = fgets($fp, 4096); $chunks = preg_split("/(\t+)|( +)/", $line); for ($i = 1, $l = count($chunks); $i < $l; $i++) { // Cache mime types we do find self::$mimes[$chunks[$i]] = $chunks[0]; if (rtrim($chunks[$i]) == $ext) { // Store away file location self::$pos = ftell($fp); self::$lastMimeFile = $mimeFile; // Return the mime type $mime = $chunks[0]; break; } } } fclose($fp); } return $mime; }