У меня есть некоторые изображения в мусорном ведре, я хочу проверить заголовок для проверки формата (jpg, png, и т.д.)
Я не хочу использовать временные файлы! У меня есть решение с помощью ВРЕМЕННЫХ ФАЙЛОВ.
Биты начинаются с:
$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%. Итак, сравните первые байты с этими строками, и вы получите ответ.
Вот реализация функции, описанной 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, указывающая тип изображения.»
Используйте расширение PHP fileinfo:
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) для более ранних версий.
Почему бы просто не проверить расширение файла? :)
Альтернатива
if(exif_imagetype($filepath) == IMAGETYPE_JPEG){
echo 'This is a JPEG image';
}