У меня есть несколько изображений в 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) для более ранних версий.