1: <?php
2:
3: 4: 5: 6: 7: 8: 9: 10: 11:
12:
13:
14:
15: 16: 17: 18: 19: 20:
21: final class NMimeTypeDetector
22: {
23:
24: 25: 26:
27: final public function __construct()
28: {
29: throw new NStaticClassException;
30: }
31:
32:
33:
34: 35: 36: 37: 38:
39: public static function fromFile($file)
40: {
41: if (!is_file($file)) {
42: throw new 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;].*$#', '', 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+$#', $type) ? $type : 'application/octet-stream';
57: }
58:
59:
60:
61: 62: 63: 64: 65:
66: public static function fromString($data)
67: {
68: if (extension_loaded('fileinfo') && preg_match('#^(\S+/[^\s;]+)#', finfo_buffer(finfo_open(FILEINFO_MIME), $data), $m)) {
69: return $m[1];
70:
71: } elseif (strncmp($data, "\xff\xd8", 2) === 0) {
72: return 'image/jpeg';
73:
74: } elseif (strncmp($data, "\x89PNG", 4) === 0) {
75: return 'image/png';
76:
77: } elseif (strncmp($data, "GIF", 3) === 0) {
78: return 'image/gif';
79:
80: } else {
81: return 'application/octet-stream';
82: }
83: }
84:
85: }
86: