Intereting Posts
Кэшированные, PHP генерируемые миниатюры загружаются медленно Красноречивый запрос: идентификатор столбца неоднозначный Базовый php для установки ширины столбца в Joomla Проверка XPath / Domdocument для дочернего объекта по имени класса PHP preg_split с двумя разделителями, если разделитель не находится в кавычках Вставить данные в вложенный массив в mongodb Проверьте, нравится ли пользователю фан-страница PHP socket_write () отправляет только часть данных Поиск в Google: скопировать страницу результатов в PHP для итоговых результатов Laravel 5 '..failed to open stream: Permission denied' exception при подключении к localhost Приверженность Zend Framework – любые аргументы против? php 5.3 Недопустимые символы CLI Ошибка # 2101: Строка, переданная в URLVariables.decode (), должна быть закодирована в URL PHP Параллельные завитки Выравнивание ларавелла неправильно вызвано несколькими встроенными css и внешними css в одном файле клипа

Автоматическое определение формата изображения в PHP

Я ищу способ загрузить загруженное пользователем изображение, которое в настоящее время помещено во временное местоположение ex: / tmp / jkhjkh78 и создать из него php-изображение, автоматически определяя формат.

Есть ли более умный способ сделать это, чем куча try / catch с imagefromjpeg, imagefrompng и т. Д.?

Это одна из функций getimagesize . Вероятно, они должны были назвать это «getimageinfo», но для вас это PHP.

//Image Processing $cover = $_FILES['cover']['name']; $cover_tmp_name = $_FILES['cover']['tmp_name']; $cover_img_path = '/images/'; $type = exif_imagetype($cover_tmp_name); if ($type == (IMAGETYPE_PNG || IMAGETYPE_JPEG || IMAGETYPE_GIF || IMAGETYPE_BMP)) { $cover_pre_name = md5($cover); //Just to make a image name random and cool :D /** * @description : possible exif_imagetype() return values in $type * 1 - gif image * 2 - jpg image * 3 - png image * 6 - bmp image */ switch ($type) { #There are more type you can choose. Take a look in php manual -> http://www.php.net/manual/en/function.exif-imagetype.php case '1' : $cover_format = 'gif'; break; case '2' : $cover_format = 'jpg'; break; case '3' : $cover_format = 'png'; break; case '6' : $cover_format = 'bmp'; break; default : die('There is an error processing the image -> please try again with a new image'); break; } $cover_name = $cover_pre_name . '.' . $cover_format; //Checks whether the uploaded file exist or not if (file_exists($cover_img_path . $cover_name)) { $extra = 1; while (file_exists($cover_img_path . $cover_name)) { $cover_name = md5($cover) . $extra . '.' . $cover_format; $extra++; } } //Image Processing Ends 

это сделает имя изображения крутым и уникальным

Вы можете попробовать finfo_file (), видимо, улучшенную версию mime_content_type ().

Изменить: ОК, getimagesize () лучше ..

Используйте exif_imagetype (), если он доступен ..:

http://www.php.net/manual/en/function.exif-imagetype.php

Я уверен, что exif-функции доступны по умолчанию (т. Е. Вы должны специально исключать их, а не включать их отдельно) при установке php

Вы можете вызвать системную команду (если вы находитесь под linux / unix), file если хотите:

 kender@eira:~$ file a a: JPEG image data, EXIF standard 2.2 

Это поможет вам узнать расширение, а также результат, основанный на условии

$ image_file = ' http://img.ruphp.com/format/images.gif ';
$ extension = substr ($ image_file, -4);
if ($ extension == ".jpg") {echo 'Свой JPG-изображение.'; } else {echo 'Не изображение JPG.'; }

Люди рекомендуют использовать getimagesize() но в документации говорится:

Внимание. Эта функция ожидает, что имя файла будет действительным файлом изображения. Если предоставляется файл без изображения, он может быть неправильно обнаружен как изображение, и функция вернется успешно, но массив может содержать бессмысленные значения.

Не используйте getimagesize() чтобы проверить, что данный файл является допустимым изображением. Вместо этого используйте специально разработанное решение, такое как расширение Fileinfo .

Соответствующей функцией в расширении Fileinfo является finfo_file() :

 string finfo_file ( resource $finfo , string $file_name = NULL [, int $options = FILEINFO_NONE [, resource $context = NULL ]] ) 

Возвращает текстовое описание содержимого аргумента file_name или FALSE, если произошла ошибка.

Примеры возвращаемых значений: text/html , image/gif , application/vnd.ms-excel

Однако комментарии на странице официальной документации предупреждают, что для проверки также не следует полагаться.