|
43 | 43 | function finfo_buffer($finfo, $string = null, $options = FILEINFO_NONE, $context = null)
|
44 | 44 | {
|
45 | 45 | if ($finfo !== false && !is_null($string) && is_null($context)) {
|
46 |
| - if ($options === FILEINFO_NONE && ($finfo & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE || $finfo & FILEINFO_MIME_ENCODING === FILEINFO_MIME_ENCODING)) { |
| 46 | + if ($options === FILEINFO_NONE && (($finfo & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE || ($finfo & FILEINFO_MIME_ENCODING) === FILEINFO_MIME_ENCODING)) { |
47 | 47 | $options = $finfo;
|
48 | 48 | }
|
49 | 49 |
|
50 |
| - if ($options & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE || $options & FILEINFO_MIME_ENCODING === FILEINFO_MIME_ENCODING) { |
51 |
| - if (substr($string, 8) === "\x89PNG\x0d\x0a\x1a\x0a") { |
| 50 | + if (($options & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE || ($options & FILEINFO_MIME_ENCODING) === FILEINFO_MIME_ENCODING) { |
| 51 | + $mimeEncoding = 'binary'; |
| 52 | + |
| 53 | + if (substr($string, 0, 8) === "\x89PNG\x0d\x0a\x1a\x0a") { |
52 | 54 | $mimeType = 'image/png';
|
53 |
| - } elseif (substr($string, 6) === 'GIF87a' || substr($string, 6) === 'GIF89a') { |
| 55 | + } elseif (substr($string, 0, 6) === 'GIF87a' || substr($string, 0, 6) === 'GIF89a') { |
54 | 56 | $mimeType = 'image/gif';
|
55 |
| - } elseif (substr($string, 4) === "MM\x00\x2a" || substr($string, 4) === "II\x2a\x00") { |
| 57 | + } elseif (substr($string, 0, 4) === "MM\x00\x2a" || substr($string, 0, 4) === "II\x2a\x00") { |
56 | 58 | $mimeType = 'image/tiff';
|
57 |
| - } elseif (substr($string, 4) === '8BPS') { |
| 59 | + } elseif (substr($string, 0, 4) === '8BPS') { |
58 | 60 | $mimeType = 'image/vnd.adobe.photoshop';
|
59 |
| - } elseif (substr($string, 3) === "\xFF\xD8\xFF") { |
| 61 | + } elseif (substr($string, 0, 3) === "\xFF\xD8\xFF") { |
60 | 62 | $mimeType = 'image/jpeg';
|
61 |
| - } elseif (substr($string, 2) === 'BM') { |
| 63 | + } elseif (substr($string, 0, 2) === 'BM') { |
62 | 64 | $mimeType = 'image/bmp';
|
| 65 | + } elseif (strpos($string, "\x00") !== false) { |
| 66 | + $mimeType = 'application/octet-stream'; |
63 | 67 | } else {
|
64 |
| - return false; |
| 68 | + $mimeEncoding = 'utf-8'; |
| 69 | + $mimeType = 'text/plain'; |
65 | 70 | }
|
66 | 71 |
|
67 |
| - if ($options & FILEINFO_MIME === FILEINFO_MIME) { |
68 |
| - return $mimeType.'; charset=binary'; |
| 72 | + if (($options & FILEINFO_MIME) === FILEINFO_MIME) { |
| 73 | + return $mimeType.'; charset='.$mimeEncoding; |
69 | 74 | }
|
70 | 75 |
|
71 |
| - if ($options & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE) { |
| 76 | + if (($options & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE) { |
72 | 77 | return $mimeType;
|
73 | 78 | }
|
74 | 79 |
|
75 |
| - return 'binary'; |
| 80 | + return $mimeEncoding; |
76 | 81 | }
|
77 | 82 | }
|
78 | 83 |
|
@@ -102,14 +107,14 @@ function finfo_close($finfo)
|
102 | 107 | function finfo_file($finfo, $filename = null, $options = FILEINFO_NONE, $context = null)
|
103 | 108 | {
|
104 | 109 | if ($finfo !== false && !is_null($filename)) {
|
105 |
| - if ($options === FILEINFO_NONE && ($finfo & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE || $finfo & FILEINFO_MIME_ENCODING === FILEINFO_MIME_ENCODING)) { |
| 110 | + if ($options === FILEINFO_NONE && (($finfo & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE || ($finfo & FILEINFO_MIME_ENCODING) === FILEINFO_MIME_ENCODING)) { |
106 | 111 | $options = $finfo;
|
107 | 112 | }
|
108 | 113 |
|
109 |
| - if ($options & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE || $options & FILEINFO_MIME_ENCODING === FILEINFO_MIME_ENCODING) { |
| 114 | + if (($options & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE || ($options & FILEINFO_MIME_ENCODING) === FILEINFO_MIME_ENCODING) { |
110 | 115 | $mimeType = finfo_buffer($finfo, file_get_contents($filename, false, $context), $options, $context);
|
111 | 116 |
|
112 |
| - if ($mimeType === false) { |
| 117 | + if ($mimeType === false || $mimeType === 'application/octet-stream') { |
113 | 118 | $extension = strtolower(end(explode('.', basename($filename))));
|
114 | 119 |
|
115 | 120 | switch ($extension) {
|
@@ -137,22 +142,26 @@ function finfo_file($finfo, $filename = null, $options = FILEINFO_NONE, $context
|
137 | 142 | case 'tiff':
|
138 | 143 | $mimeType = 'image/tiff';
|
139 | 144 | break;
|
| 145 | + case 'text': |
| 146 | + case 'txt': |
| 147 | + $mimeType = 'text/plain'; |
| 148 | + break; |
140 | 149 | default:
|
141 |
| - return false; |
| 150 | + $mimeType = 'application/octet-stream'; |
142 | 151 | }
|
| 152 | + } |
143 | 153 |
|
144 |
| - if ($options & FILEINFO_MIME === FILEINFO_MIME) { |
145 |
| - return $mimeType.'; charset=binary'; |
146 |
| - } |
| 154 | + $mimeEncoding = $mimeType === 'text/plain' ? 'utf-8' : 'binary'; |
147 | 155 |
|
148 |
| - if ($options & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE) { |
149 |
| - return $mimeType; |
150 |
| - } |
| 156 | + if (($options & FILEINFO_MIME) === FILEINFO_MIME) { |
| 157 | + return $mimeType.'; charset='.$mimeEncoding; |
| 158 | + } |
151 | 159 |
|
152 |
| - return 'binary'; |
| 160 | + if (($options & FILEINFO_MIME_TYPE) === FILEINFO_MIME_TYPE) { |
| 161 | + return $mimeType; |
153 | 162 | }
|
154 | 163 |
|
155 |
| - return $mimeType; |
| 164 | + return $mimeEncoding; |
156 | 165 | }
|
157 | 166 | }
|
158 | 167 |
|
@@ -348,6 +357,7 @@ public function createThumbnailFromPath($name, $fullPath, $width, $height, $exac
|
348 | 357 |
|
349 | 358 | $image->save($pathThumbnail);
|
350 | 359 | } catch (\RuntimeException $exception) {
|
| 360 | + Zend_Registry::get('logger')->err($exception->getMessage()); |
351 | 361 | throw new Zend_Exception('Thumbnail creation failed');
|
352 | 362 | }
|
353 | 363 | } else {
|
|
0 commit comments