/* Finds the mime-type of a file or says it is octet-stream (download) $ext - the file extension $filePath - the whole file path (used for fall-back searching) */ function mimeType($ext, $filePath = null) { switch ($ext) { /* Images */ case 'jpg': case 'JPG': case 'jpeg': case 'JPEG': return 'image/jpeg'; break; case 'png': case 'PNG': return 'image/png'; break; case 'gif': case 'GIF': return 'image/gif'; break; case 'bmp': case 'BMP': return 'images/bmp'; break; /* Audio */ case 'wav': case 'WAV': return 'audio/x-wav'; break; case 'mid': case 'MID': return 'audio/x-midi'; break; /* Video */ case 'mpg': case 'MPG': case 'mpeg': case 'MPEG': case 'mpe': case 'MPE': return 'video/mpeg'; break; case 'qt': case 'QT': case 'mov': case 'MOV': return 'video/quicktime'; break; case 'avi': case 'AVI': return 'video/x-msvideo'; break; case 'movie': case 'MOVIE': return 'video/x-sgi-movie'; break; /* Application */ case 'pdf': case 'PDF': return 'application/pdf'; break; /* Text */ case 'css': case 'CSS': return 'text/css'; break; case 'js': case 'JS': return 'text/javascript'; break; case 'html': case 'HTML': case 'htm': case 'HTM': return 'text/html'; break; case 'rtf': case 'RTF': case 'rtx': case 'RTX': return 'text/richtext'; break; case 'txt': case 'TXT': return 'text/plain'; break; /* Fallback to other detection or octet-stream */ default: if (!empty($filePath) && function_exists('finfo_open')) { $fh = finfo_open(FILEINFO_MIME); $info = finfo_file($fh, $filePath); finfo_close($fh); return $info; } elseif (!empty($filePath) && function_exists('mime_content_type')) { return mime_content_type($filePath); } else { return 'application/octet-stream'; } break; } }