PHP: данные двоичного изображения, проверка типа изображения

У меня есть несколько изображений в bin, я хочу проверить заголовок, чтобы проверить формат (jpg, png и т. Д.),

Я не хочу использовать временные файлы! У меня есть решение с использованием TEMP FILES.

Биты начинаются с:

$JPEG = "\xFF\xD8\xFF" $GIF = "GIF" $PNG = "\x89\x50\x4e\x47\x0d\x0a\x1a\x0a" $BMP = "BM" $PSD = "8BPS" $SWF = "FWS" 

Другие, которые я бы сейчас не знал, но большие 3 (jpeg, gif, png) обычно покрывают 99%. Итак, сравните первые байты с этой строкой, и у вас есть ответ.

Я могу сказать, что большинство из вас не понимало вопроса 🙂 (вопрос состоял в том, как проверять двоичные данные в буфере, а не на диске на диске).

У меня была такая же проблема, и я решил:

 $finfo = new finfo(FILEINFO_MIME_TYPE); $finfo->buffer($rawImage); 

Вот реализация функции, описанной Wrikken

 function getImgType($filename) { $handle = @fopen($filename, 'r'); if (!$handle) throw new Exception('File Open Error'); $types = array('jpeg' => "\xFF\xD8\xFF", 'gif' => 'GIF', 'png' => "\x89\x50\x4e\x47\x0d\x0a", 'bmp' => 'BM', 'psd' => '8BPS', 'swf' => 'FWS'); $bytes = fgets($handle, 8); $found = 'other'; foreach ($types as $type => $header) { if (strpos($bytes, $header) === 0) { $found = $type; break; } } fclose($handle); return $found; } 

Загружаются ли файлы или они уже находятся в файловой системе?

Попробуйте использовать mime_content_type() чтобы получить формат MIME файла.

http://php.net/manual/en/function.getimagesize.php

«Индекс 2 является одной из констант IMAGETYPE_XXX, указывающих тип изображения».

Почему бы просто не проверить наличие файла? 🙂

Альтернатива

 if(exif_imagetype($filepath) == IMAGETYPE_JPEG){ echo 'This is a JPEG image'; } 

Используйте расширение fileinfo PHP:

http://de.php.net/manual/en/function.finfo-file.php

Он использует команду «file» * nix для надежного определения типа mime данного файла:

 $finfo = finfo_open(FILEINFO_MIME_TYPE); $mimetype = finfo_file($finfo, $filename); finfo_close($finfo); 

Это расширение поставляется с PHP 5.3 или может быть установлено из pecl (pecl install fileinfo) для более ранних версий.