|
20 | 20 |
|
21 | 21 | include_once BASE_PATH.'/library/KWUtils.php';
|
22 | 22 |
|
| 23 | +if (extension_loaded('fileinfo') === false) { |
| 24 | + define('FILEINFO_NONE', 0); |
| 25 | + define('FILEINFO_SYMLINK', 2); |
| 26 | + define('FILEINFO_DEVICES', 8); |
| 27 | + define('FILEINFO_CONTINUE', 32); |
| 28 | + define('FILEINFO_PRESERVE_ATIME', 128); |
| 29 | + define('FILEINFO_RAW', 256); |
| 30 | + define('FILEINFO_MIME_TYPE', 16); |
| 31 | + define('FILEINFO_MIME_ENCODING', 1024); |
| 32 | + define('FILEINFO_MIME', 1040); |
| 33 | + |
| 34 | + /** |
| 35 | + * Return information about a given string. |
| 36 | + * |
| 37 | + * @param null|int|resource $finfo fileinfo resource |
| 38 | + * @param null|string $string content of the file to be checked |
| 39 | + * @param int $options fileinfo constant (FILEINFO_NONE | FILEINFO_MIME_TYPE | FILEINFO_MIME_ENCODING | FILEINFO_MIME) |
| 40 | + * @param null|resource $context context (not implemented) |
| 41 | + * @return false|string a textual description of the given string or false on failure |
| 42 | + */ |
| 43 | + function finfo_buffer($finfo, $string = null, $options = FILEINFO_NONE, $context = null) |
| 44 | + { |
| 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)) { |
| 47 | + $options = $finfo; |
| 48 | + } |
| 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") { |
| 52 | + $mimeType = 'image/png'; |
| 53 | + } elseif (substr($string, 6) === 'GIF87a' || substr($string, 6) === 'GIF89a') { |
| 54 | + $mimeType = 'image/gif'; |
| 55 | + } elseif (substr($string, 4) === "MM\x00\x2a" || substr($string, 4) === "II\x2a\x00") { |
| 56 | + $mimeType = 'image/tiff'; |
| 57 | + } elseif (substr($string, 4) === '8BPS') { |
| 58 | + $mimeType = 'image/vnd.adobe.photoshop'; |
| 59 | + } elseif (substr($string, 3) === "\xFF\xD8\xFF") { |
| 60 | + $mimeType = 'image/jpeg'; |
| 61 | + } elseif (substr($string, 2) === 'BM') { |
| 62 | + $mimeType = 'image/bmp'; |
| 63 | + } else { |
| 64 | + return false; |
| 65 | + } |
| 66 | + |
| 67 | + if ($options & FILEINFO_MIME === FILEINFO_MIME) { |
| 68 | + return $mimeType.'; charset=binary'; |
| 69 | + } |
| 70 | + |
| 71 | + if ($options & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE) { |
| 72 | + return $mimeType; |
| 73 | + } |
| 74 | + |
| 75 | + return 'binary'; |
| 76 | + } |
| 77 | + } |
| 78 | + |
| 79 | + return false; |
| 80 | + } |
| 81 | + |
| 82 | + /** |
| 83 | + * Close a given fileinfo resource. |
| 84 | + * |
| 85 | + * @param null|resource $finfo fileinfo resource |
| 86 | + * @return bool true on success or false on failure |
| 87 | + */ |
| 88 | + function finfo_close($finfo) |
| 89 | + { |
| 90 | + return $finfo !== false; |
| 91 | + } |
| 92 | + |
| 93 | + /** |
| 94 | + * Return information about a given file. |
| 95 | + * |
| 96 | + * @param null|int|resource $finfo fileinfo resource |
| 97 | + * @param null|string $filename name of the file to be checked |
| 98 | + * @param int $options fileinfo constant (FILEINFO_NONE | FILEINFO_MIME_TYPE | FILEINFO_MIME_ENCODING | FILEINFO_MIME) |
| 99 | + * @param null|resource $context context (partially implemented) |
| 100 | + * @return false|string a textual description of the contents of the given file or false on failure |
| 101 | + */ |
| 102 | + function finfo_file($finfo, $filename = null, $options = FILEINFO_NONE, $context = null) |
| 103 | + { |
| 104 | + 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)) { |
| 106 | + $options = $finfo; |
| 107 | + } |
| 108 | + |
| 109 | + if ($options & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE || $options & FILEINFO_MIME_ENCODING === FILEINFO_MIME_ENCODING) { |
| 110 | + $mimeType = finfo_buffer($finfo, file_get_contents($filename, false, $context), $options, $context); |
| 111 | + |
| 112 | + if ($mimeType === false) { |
| 113 | + $extension = strtolower(end(explode('.', basename($filename)))); |
| 114 | + |
| 115 | + switch ($extension) { |
| 116 | + case 'bmp': |
| 117 | + $mimeType = 'image/bmp'; |
| 118 | + break; |
| 119 | + case 'gif': |
| 120 | + $mimeType = 'image/gif'; |
| 121 | + break; |
| 122 | + case 'ico': |
| 123 | + $mimeType = 'image/x-icon'; |
| 124 | + break; |
| 125 | + case 'jpe': |
| 126 | + case 'jpeg': |
| 127 | + case 'jpg': |
| 128 | + $mimeType = 'image/jpeg'; |
| 129 | + break; |
| 130 | + case 'png': |
| 131 | + $mimeType = 'image/png'; |
| 132 | + break; |
| 133 | + case 'psd': |
| 134 | + $mimeType = 'image/vnd.adobe.photoshop'; |
| 135 | + break; |
| 136 | + case 'tif': |
| 137 | + case 'tiff': |
| 138 | + $mimeType = 'image/tiff'; |
| 139 | + break; |
| 140 | + default: |
| 141 | + return false; |
| 142 | + } |
| 143 | + |
| 144 | + if ($options & FILEINFO_MIME === FILEINFO_MIME) { |
| 145 | + return $mimeType.'; charset=binary'; |
| 146 | + } |
| 147 | + |
| 148 | + if ($options & FILEINFO_MIME_TYPE === FILEINFO_MIME_TYPE) { |
| 149 | + return $mimeType; |
| 150 | + } |
| 151 | + |
| 152 | + return 'binary'; |
| 153 | + } |
| 154 | + |
| 155 | + return $mimeType; |
| 156 | + } |
| 157 | + } |
| 158 | + |
| 159 | + return false; |
| 160 | + } |
| 161 | + |
| 162 | + /** |
| 163 | + * Create a new fileinfo resource. |
| 164 | + * |
| 165 | + * @param int $options fileinfo constant (FILEINFO_NONE | FILEINFO_MIME_TYPE | FILEINFO_MIME_ENCODING | FILEINFO_MIME) |
| 166 | + * @param null|string $magic name of a magic database file (not implemented) |
| 167 | + * @return null|int|resource a fileinfo resource on success or false on failure. |
| 168 | + */ |
| 169 | + function finfo_open($options = FILEINFO_NONE, $magic = null) |
| 170 | + { |
| 171 | + return is_null($magic) ? $options : false; |
| 172 | + } |
| 173 | + |
| 174 | + /** |
| 175 | + * Set the magic configuration options (not implemented). |
| 176 | + * |
| 177 | + * @param null|int|resource $finfo fileinfo resource |
| 178 | + * @param int $options fileinfo constant (FILEINFO_NONE | FILEINFO_MIME_TYPE | FILEINFO_MIME_ENCODING | FILEINFO_MIME) |
| 179 | + * @return bool true on success or false on failure |
| 180 | + */ |
| 181 | + function finfo_set_flags($finfo, $options) |
| 182 | + { |
| 183 | + return $finfo === $options; |
| 184 | + } |
| 185 | +} |
| 186 | + |
23 | 187 | /** Component used to create thumbnails using phMagick library (on top of ImageMagick) */
|
24 | 188 | class Thumbnailcreator_ImagemagickComponent extends AppComponent
|
25 | 189 | {
|
|
0 commit comments