diff options
Diffstat (limited to 'src/application/mystic/forum/utils/FileUtils.php')
-rw-r--r-- | src/application/mystic/forum/utils/FileUtils.php | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/application/mystic/forum/utils/FileUtils.php b/src/application/mystic/forum/utils/FileUtils.php new file mode 100644 index 0000000..1910f0c --- /dev/null +++ b/src/application/mystic/forum/utils/FileUtils.php @@ -0,0 +1,33 @@ +<?php +declare(strict_types=1); + +namespace mystic\forum\utils; + +final class FileUtils { + use StaticClass; + + private const MIME_FILE = __DIR__ . "/../../../assets/mimetypes"; + public const DEFAULT_MIME_TYPE = "application/octet-stream"; + + private static ?array $extToMime = null; + + private static function ensureMimeMapping(): void { + if (self::$extToMime !== null) + return; + + self::$extToMime = []; + + $hFile = fopen(self::MIME_FILE, "r"); + while (($ln = fgets($hFile)) !== false) { + [$mime, $extensions] = preg_split('/\t+/', $ln, 2); + $extensions = explode(" ", strtolower($extensions)); + foreach ($extensions as $ext) + self::$extToMime[$ext] = $mime; + } + } + + public static function getMimeTypeForExtension(string $extension, string $defaultMimeType = self::DEFAULT_MIME_TYPE): string { + self::ensureMimeMapping(); + return self::$extToMime[strtolower($extension)] ?? $defaultMimeType; + } +} |