1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10:
11:
12: namespace Nette\Utils;
13:
14: use Nette;
15:
16:
17: 18: 19: 20: 21:
22: final class MimeTypeDetector
23: {
24:
25: 26: 27:
28: final public function __construct()
29: {
30: throw new Nette\StaticClassException;
31: }
32:
33:
34: 35: 36: 37: 38:
39: public static function fromFile($file)
40: {
41: if (!is_file($file)) {
42: throw new Nette\FileNotFoundException("File '$file' not found.");
43: }
44:
45: $info = @getimagesize($file);
46: if (isset($info['mime'])) {
47: return $info['mime'];
48:
49: } elseif (extension_loaded('fileinfo')) {
50: $type = preg_replace('#[\s;].*\z#', '', finfo_file(finfo_open(FILEINFO_MIME), $file));
51:
52: } elseif (function_exists('mime_content_type')) {
53: $type = mime_content_type($file);
54: }
55:
56: return isset($type) && preg_match('#^\S+/\S+\z#', $type) ? $type : 'application/octet-stream';
57: }
58:
59:
60: 61: 62: 63: 64:
65: public static function fromString($data)
66: {
67: if (extension_loaded('fileinfo') && preg_match('#^(\S+/[^\s;]+)#', finfo_buffer(finfo_open(FILEINFO_MIME), $data), $m)) {
68: return $m[1];
69:
70: } elseif (strncmp($data, "\xff\xd8", 2) === 0) {
71: return 'image/jpeg';
72:
73: } elseif (strncmp($data, "\x89PNG", 4) === 0) {
74: return 'image/png';
75:
76: } elseif (strncmp($data, "GIF", 3) === 0) {
77: return 'image/gif';
78:
79: } else {
80: return 'application/octet-stream';
81: }
82: }
83:
84: }
85: