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

/vendor/league/flysystem/src/Util/MimeType.php

https://gitlab.com/ealexis.t/trends
PHP | 213 lines | 176 code | 12 blank | 25 comment | 4 complexity | f9866cbab30f338fd4dede9bdaf9663c MD5 | raw file
  1. <?php
  2. namespace League\Flysystem\Util;
  3. use Finfo;
  4. /**
  5. * @internal
  6. */
  7. class MimeType
  8. {
  9. /**
  10. * Detects MIME Type based on given content.
  11. *
  12. * @param mixed $content
  13. *
  14. * @return string|null MIME Type or NULL if no mime type detected
  15. */
  16. public static function detectByContent($content)
  17. {
  18. if ( ! class_exists('Finfo') || ! is_string($content)) {
  19. return;
  20. }
  21. $finfo = new Finfo(FILEINFO_MIME_TYPE);
  22. $mimeType = $finfo->buffer($content);
  23. return $mimeType ?: null;
  24. }
  25. /**
  26. * Detects MIME Type based on file extension.
  27. *
  28. * @param string $extension
  29. *
  30. * @return string|null MIME Type or NULL if no extension detected
  31. */
  32. public static function detectByFileExtension($extension)
  33. {
  34. static $extensionToMimeTypeMap;
  35. if (! $extensionToMimeTypeMap) {
  36. $extensionToMimeTypeMap = static::getExtensionToMimeTypeMap();
  37. }
  38. if (isset($extensionToMimeTypeMap[$extension])) {
  39. return $extensionToMimeTypeMap[$extension];
  40. }
  41. return 'text/plain';
  42. }
  43. /**
  44. * @param string $filename
  45. *
  46. * @return string
  47. */
  48. public static function detectByFilename($filename)
  49. {
  50. $extension = pathinfo($filename, PATHINFO_EXTENSION);
  51. return empty($extension) ? 'text/plain' : static::detectByFileExtension($extension);
  52. }
  53. /**
  54. * @return array Map of file extension to MIME Type
  55. */
  56. public static function getExtensionToMimeTypeMap()
  57. {
  58. return [
  59. 'hqx' => 'application/mac-binhex40',
  60. 'cpt' => 'application/mac-compactpro',
  61. 'csv' => 'text/x-comma-separated-values',
  62. 'bin' => 'application/octet-stream',
  63. 'dms' => 'application/octet-stream',
  64. 'lha' => 'application/octet-stream',
  65. 'lzh' => 'application/octet-stream',
  66. 'exe' => 'application/octet-stream',
  67. 'class' => 'application/octet-stream',
  68. 'psd' => 'application/x-photoshop',
  69. 'so' => 'application/octet-stream',
  70. 'sea' => 'application/octet-stream',
  71. 'dll' => 'application/octet-stream',
  72. 'oda' => 'application/oda',
  73. 'pdf' => 'application/pdf',
  74. 'ai' => 'application/pdf',
  75. 'eps' => 'application/postscript',
  76. 'ps' => 'application/postscript',
  77. 'smi' => 'application/smil',
  78. 'smil' => 'application/smil',
  79. 'mif' => 'application/vnd.mif',
  80. 'xls' => 'application/vnd.ms-excel',
  81. 'ppt' => 'application/powerpoint',
  82. 'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
  83. 'wbxml' => 'application/wbxml',
  84. 'wmlc' => 'application/wmlc',
  85. 'dcr' => 'application/x-director',
  86. 'dir' => 'application/x-director',
  87. 'dxr' => 'application/x-director',
  88. 'dvi' => 'application/x-dvi',
  89. 'gtar' => 'application/x-gtar',
  90. 'gz' => 'application/x-gzip',
  91. 'gzip' => 'application/x-gzip',
  92. 'php' => 'application/x-httpd-php',
  93. 'php4' => 'application/x-httpd-php',
  94. 'php3' => 'application/x-httpd-php',
  95. 'phtml' => 'application/x-httpd-php',
  96. 'phps' => 'application/x-httpd-php-source',
  97. 'js' => 'application/javascript',
  98. 'swf' => 'application/x-shockwave-flash',
  99. 'sit' => 'application/x-stuffit',
  100. 'tar' => 'application/x-tar',
  101. 'tgz' => 'application/x-tar',
  102. 'z' => 'application/x-compress',
  103. 'xhtml' => 'application/xhtml+xml',
  104. 'xht' => 'application/xhtml+xml',
  105. 'zip' => 'application/x-zip',
  106. 'rar' => 'application/x-rar',
  107. 'mid' => 'audio/midi',
  108. 'midi' => 'audio/midi',
  109. 'mpga' => 'audio/mpeg',
  110. 'mp2' => 'audio/mpeg',
  111. 'mp3' => 'audio/mpeg',
  112. 'aif' => 'audio/x-aiff',
  113. 'aiff' => 'audio/x-aiff',
  114. 'aifc' => 'audio/x-aiff',
  115. 'ram' => 'audio/x-pn-realaudio',
  116. 'rm' => 'audio/x-pn-realaudio',
  117. 'rpm' => 'audio/x-pn-realaudio-plugin',
  118. 'ra' => 'audio/x-realaudio',
  119. 'rv' => 'video/vnd.rn-realvideo',
  120. 'wav' => 'audio/x-wav',
  121. 'jpg' => 'image/jpeg',
  122. 'jpeg' => 'image/jpeg',
  123. 'jpe' => 'image/jpeg',
  124. 'png' => 'image/png',
  125. 'gif' => 'image/gif',
  126. 'bmp' => 'image/bmp',
  127. 'tiff' => 'image/tiff',
  128. 'tif' => 'image/tiff',
  129. 'svg' => 'image/svg+xml',
  130. 'css' => 'text/css',
  131. 'html' => 'text/html',
  132. 'htm' => 'text/html',
  133. 'shtml' => 'text/html',
  134. 'txt' => 'text/plain',
  135. 'text' => 'text/plain',
  136. 'log' => 'text/plain',
  137. 'rtx' => 'text/richtext',
  138. 'rtf' => 'text/rtf',
  139. 'xml' => 'application/xml',
  140. 'xsl' => 'application/xml',
  141. 'mpeg' => 'video/mpeg',
  142. 'mpg' => 'video/mpeg',
  143. 'mpe' => 'video/mpeg',
  144. 'qt' => 'video/quicktime',
  145. 'mov' => 'video/quicktime',
  146. 'avi' => 'video/x-msvideo',
  147. 'movie' => 'video/x-sgi-movie',
  148. 'doc' => 'application/msword',
  149. 'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  150. 'dot' => 'application/msword',
  151. 'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
  152. 'xlsx' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
  153. 'word' => 'application/msword',
  154. 'xl' => 'application/excel',
  155. 'eml' => 'message/rfc822',
  156. 'json' => 'application/json',
  157. 'pem' => 'application/x-x509-user-cert',
  158. 'p10' => 'application/x-pkcs10',
  159. 'p12' => 'application/x-pkcs12',
  160. 'p7a' => 'application/x-pkcs7-signature',
  161. 'p7c' => 'application/pkcs7-mime',
  162. 'p7m' => 'application/pkcs7-mime',
  163. 'p7r' => 'application/x-pkcs7-certreqresp',
  164. 'p7s' => 'application/pkcs7-signature',
  165. 'crt' => 'application/x-x509-ca-cert',
  166. 'crl' => 'application/pkix-crl',
  167. 'der' => 'application/x-x509-ca-cert',
  168. 'kdb' => 'application/octet-stream',
  169. 'pgp' => 'application/pgp',
  170. 'gpg' => 'application/gpg-keys',
  171. 'sst' => 'application/octet-stream',
  172. 'csr' => 'application/octet-stream',
  173. 'rsa' => 'application/x-pkcs7',
  174. 'cer' => 'application/pkix-cert',
  175. '3g2' => 'video/3gpp2',
  176. '3gp' => 'video/3gp',
  177. 'mp4' => 'video/mp4',
  178. 'm4a' => 'audio/x-m4a',
  179. 'f4v' => 'video/mp4',
  180. 'webm' => 'video/webm',
  181. 'aac' => 'audio/x-acc',
  182. 'm4u' => 'application/vnd.mpegurl',
  183. 'm3u' => 'text/plain',
  184. 'xspf' => 'application/xspf+xml',
  185. 'vlc' => 'application/videolan',
  186. 'wmv' => 'video/x-ms-wmv',
  187. 'au' => 'audio/x-au',
  188. 'ac3' => 'audio/ac3',
  189. 'flac' => 'audio/x-flac',
  190. 'ogg' => 'audio/ogg',
  191. 'kmz' => 'application/vnd.google-earth.kmz',
  192. 'kml' => 'application/vnd.google-earth.kml+xml',
  193. 'ics' => 'text/calendar',
  194. 'zsh' => 'text/x-scriptzsh',
  195. '7zip' => 'application/x-7z-compressed',
  196. 'cdr' => 'application/cdr',
  197. 'wma' => 'audio/x-ms-wma',
  198. 'jar' => 'application/java-archive',
  199. ];
  200. }
  201. }