PageRenderTime 49ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/ext/mime/mime_map.php

https://github.com/shish/shimmie2
PHP | 266 lines | 252 code | 9 blank | 5 comment | 3 complexity | 96c0bbab92318d25df811b6d938f3d43 MD5 | raw file
  1. <?php declare(strict_types=1);
  2. class MimeMap
  3. {
  4. public const MAP_NAME = 'name';
  5. public const MAP_EXT = 'ext';
  6. public const MAP_MIME = 'mime';
  7. // Mime type map. Each entry in the self::ARRAY represents a kind of file, identified by the "correct" mimetype as the key.
  8. // The value for each entry is a map of three keys, ext, mime, and name.
  9. // ext's value is an array of all of the extensions that the file type can use, with the "correct" one being first.
  10. // mime's value is an array of all mime types that the file type is known to use, with the current "correct" one being first.
  11. // name's value is a human-readable name for the file format.
  12. private const MAP = [
  13. MimeType::ANI => [
  14. self::MAP_NAME => "ANI Cursor",
  15. self::MAP_EXT => [FileExtension::ANI],
  16. self::MAP_MIME => [MimeType::ANI],
  17. ],
  18. MimeType::AVI => [
  19. self::MAP_NAME => "AVI",
  20. self::MAP_EXT => [FileExtension::AVI],
  21. self::MAP_MIME => [MimeType::AVI, 'video/avi', 'video/msvideo'],
  22. ],
  23. MimeType::ASF => [
  24. self::MAP_NAME => "ASF/WMV",
  25. self::MAP_EXT => [FileExtension::ASF, FileExtension::ASX, FileExtension::WMA, FileExtension::WMV],
  26. self::MAP_MIME => [MimeType::ASF, MimeType::WMA, MimeType::WMV],
  27. ],
  28. MimeType::BMP => [
  29. self::MAP_NAME => "BMP",
  30. self::MAP_EXT => [FileExtension::BMP],
  31. self::MAP_MIME => [MimeType::BMP],
  32. ],
  33. MimeType::BZIP => [
  34. self::MAP_NAME => "BZIP",
  35. self::MAP_EXT => [FileExtension::BZIP],
  36. self::MAP_MIME => [MimeType::BZIP],
  37. ],
  38. MimeType::BZIP2 => [
  39. self::MAP_NAME => "BZIP2",
  40. self::MAP_EXT => [FileExtension::BZIP2],
  41. self::MAP_MIME => [MimeType::BZIP2],
  42. ],
  43. MimeType::COMIC_ZIP => [
  44. self::MAP_NAME => "CBZ",
  45. self::MAP_EXT => [FileExtension::CBZ],
  46. self::MAP_MIME => [MimeType::COMIC_ZIP],
  47. ],
  48. MimeType::CSS => [
  49. self::MAP_NAME => "Cascading Style Sheet",
  50. self::MAP_EXT => [FileExtension::CSS],
  51. self::MAP_MIME => [MimeType::CSS],
  52. ],
  53. MimeType::CSV => [
  54. self::MAP_NAME => "CSV",
  55. self::MAP_EXT => [FileExtension::CSV],
  56. self::MAP_MIME => [MimeType::CSV],
  57. ],
  58. MimeType::FLASH => [
  59. self::MAP_NAME => "Flash",
  60. self::MAP_EXT => [FileExtension::FLASH],
  61. self::MAP_MIME => [MimeType::FLASH],
  62. ],
  63. MimeType::FLASH_VIDEO => [
  64. self::MAP_NAME => "Flash Video",
  65. self::MAP_EXT => [FileExtension::FLASH_VIDEO],
  66. self::MAP_MIME => [MimeType::FLASH_VIDEO, 'video/flv'],
  67. ],
  68. MimeType::GIF => [
  69. self::MAP_NAME => "GIF",
  70. self::MAP_EXT => [FileExtension::GIF],
  71. self::MAP_MIME => [MimeType::GIF],
  72. ],
  73. MimeType::GZIP => [
  74. self::MAP_NAME => "GZIP",
  75. self::MAP_EXT => [FileExtension::GZIP],
  76. self::MAP_MIME => [MimeType::TAR],
  77. ],
  78. MimeType::HTML => [
  79. self::MAP_NAME => "HTML",
  80. self::MAP_EXT => [FileExtension::HTM, FileExtension::HTML],
  81. self::MAP_MIME => [MimeType::HTML],
  82. ],
  83. MimeType::ICO => [
  84. self::MAP_NAME => "Icon",
  85. self::MAP_EXT => [FileExtension::ICO, FileExtension::CUR],
  86. self::MAP_MIME => [MimeType::ICO, MimeType::ICO_OSX, MimeType::WIN_BITMAP],
  87. ],
  88. MimeType::JPEG => [
  89. self::MAP_NAME => "JPEG",
  90. self::MAP_EXT => [FileExtension::JPG, FileExtension::JPEG, FileExtension::JFIF, FileExtension::JFI],
  91. self::MAP_MIME => [MimeType::JPEG],
  92. ],
  93. MimeType::JS => [
  94. self::MAP_NAME => "JavaScript",
  95. self::MAP_EXT => [FileExtension::JS],
  96. self::MAP_MIME => [MimeType::JS],
  97. ],
  98. MimeType::JSON => [
  99. self::MAP_NAME => "JSON",
  100. self::MAP_EXT => [FileExtension::JSON],
  101. self::MAP_MIME => [MimeType::JSON],
  102. ],
  103. MimeType::MKV => [
  104. self::MAP_NAME => "Matroska",
  105. self::MAP_EXT => [FileExtension::MKV],
  106. self::MAP_MIME => [MimeType::MKV],
  107. ],
  108. MimeType::MP3 => [
  109. self::MAP_NAME => "MP3",
  110. self::MAP_EXT => [FileExtension::MP3],
  111. self::MAP_MIME => [MimeType::MP3],
  112. ],
  113. MimeType::MP4_AUDIO => [
  114. self::MAP_NAME => "MP4 Audio",
  115. self::MAP_EXT => [FileExtension::M4A],
  116. self::MAP_MIME => [MimeType::MP4_AUDIO, "audio/m4a"],
  117. ],
  118. MimeType::MP4_VIDEO => [
  119. self::MAP_NAME => "MP4 Video",
  120. self::MAP_EXT => [FileExtension::MP4, FileExtension::M4V],
  121. self::MAP_MIME => [MimeType::MP4_VIDEO, 'video/x-m4v'],
  122. ],
  123. MimeType::MPEG => [
  124. self::MAP_NAME => "MPEG",
  125. self::MAP_EXT => [FileExtension::MPG, FileExtension::MPEG],
  126. self::MAP_MIME => [MimeType::MPEG],
  127. ],
  128. MimeType::PDF => [
  129. self::MAP_NAME => "PDF",
  130. self::MAP_EXT => [FileExtension::PDF],
  131. self::MAP_MIME => [MimeType::PDF],
  132. ],
  133. MimeType::PHP => [
  134. self::MAP_NAME => "PHP",
  135. self::MAP_EXT => [FileExtension::PHP, FileExtension::PHP5],
  136. self::MAP_MIME => [MimeType::PHP],
  137. ],
  138. MimeType::PNG => [
  139. self::MAP_NAME => "PNG",
  140. self::MAP_EXT => [FileExtension::PNG],
  141. self::MAP_MIME => [MimeType::PNG],
  142. ],
  143. MimeType::PPM => [
  144. self::MAP_NAME => "Portable Pixel Map",
  145. self::MAP_EXT => [FileExtension::PPM],
  146. self::MAP_MIME => [MimeType::PPM],
  147. ],
  148. MimeType::PSD => [
  149. self::MAP_NAME => "PSD",
  150. self::MAP_EXT => [FileExtension::PSD],
  151. self::MAP_MIME => [MimeType::PSD],
  152. ],
  153. MimeType::OGG_AUDIO => [
  154. self::MAP_NAME => "Ogg Vorbis",
  155. self::MAP_EXT => [FileExtension::OGG_AUDIO, FileExtension::OGG],
  156. self::MAP_MIME => [MimeType::OGG_AUDIO, MimeType::OGG],
  157. ],
  158. MimeType::OGG_VIDEO => [
  159. self::MAP_NAME => "Ogg Theora",
  160. self::MAP_EXT => [FileExtension::OGG_VIDEO],
  161. self::MAP_MIME => [MimeType::OGG_VIDEO],
  162. ],
  163. MimeType::QUICKTIME => [
  164. self::MAP_NAME => "Quicktime",
  165. self::MAP_EXT => [FileExtension::MOV],
  166. self::MAP_MIME => [MimeType::QUICKTIME],
  167. ],
  168. MimeType::RSS => [
  169. self::MAP_NAME => "RSS",
  170. self::MAP_EXT => [FileExtension::RSS],
  171. self::MAP_MIME => [MimeType::RSS],
  172. ],
  173. MimeType::SVG => [
  174. self::MAP_NAME => "SVG",
  175. self::MAP_EXT => [FileExtension::SVG],
  176. self::MAP_MIME => [MimeType::SVG],
  177. ],
  178. MimeType::TAR => [
  179. self::MAP_NAME => "TAR",
  180. self::MAP_EXT => [FileExtension::TAR],
  181. self::MAP_MIME => [MimeType::TAR],
  182. ],
  183. MimeType::TGA => [
  184. self::MAP_NAME => "TGA",
  185. self::MAP_EXT => [FileExtension::TGA],
  186. self::MAP_MIME => [MimeType::TGA, 'image/x-targa'],
  187. ],
  188. MimeType::TEXT => [
  189. self::MAP_NAME => "Text",
  190. self::MAP_EXT => [FileExtension::TEXT, FileExtension::ASC],
  191. self::MAP_MIME => [MimeType::TEXT],
  192. ],
  193. MimeType::TIFF => [
  194. self::MAP_NAME => "TIFF",
  195. self::MAP_EXT => [FileExtension::TIF, FileExtension::TIFF],
  196. self::MAP_MIME => [MimeType::TIFF],
  197. ],
  198. MimeType::WAV => [
  199. self::MAP_NAME => "Wave",
  200. self::MAP_EXT => [FileExtension::WAV],
  201. self::MAP_MIME => [MimeType::WAV],
  202. ],
  203. MimeType::WEBM => [
  204. self::MAP_NAME => "WebM",
  205. self::MAP_EXT => [FileExtension::WEBM],
  206. self::MAP_MIME => [MimeType::WEBM],
  207. ],
  208. MimeType::WEBP => [
  209. self::MAP_NAME => "WebP",
  210. self::MAP_EXT => [FileExtension::WEBP],
  211. self::MAP_MIME => [MimeType::WEBP, MimeType::WEBP_LOSSLESS],
  212. ],
  213. MimeType::XML => [
  214. self::MAP_NAME => "XML",
  215. self::MAP_EXT => [FileExtension::XML],
  216. self::MAP_MIME => [MimeType::XML, MimeType::XML_APPLICATION],
  217. ],
  218. MimeType::XSL => [
  219. self::MAP_NAME => "XSL",
  220. self::MAP_EXT => [FileExtension::XSL],
  221. self::MAP_MIME => [MimeType::XSL],
  222. ],
  223. MimeType::ZIP => [
  224. self::MAP_NAME => "ZIP",
  225. self::MAP_EXT => [FileExtension::ZIP],
  226. self::MAP_MIME => [MimeType::ZIP],
  227. ],
  228. ];
  229. public static function get_for_extension(string $ext): ?array
  230. {
  231. $ext = strtolower($ext);
  232. foreach (self::MAP as $key => $value) {
  233. if (in_array($ext, $value[self::MAP_EXT])) {
  234. return $value;
  235. }
  236. }
  237. return null;
  238. }
  239. public static function get_for_mime(string $mime): ?array
  240. {
  241. $mime = strtolower(MimeType::remove_parameters($mime));
  242. foreach (self::MAP as $key => $value) {
  243. if (in_array($mime, $value[self::MAP_MIME])) {
  244. return $value;
  245. }
  246. }
  247. return null;
  248. }
  249. public static function get_name_for_mime(string $mime): ?string
  250. {
  251. $data = self::get_for_mime($mime);
  252. if ($data!==null) {
  253. return $data[self::MAP_NAME];
  254. }
  255. return null;
  256. }
  257. }