Почему iPad подменяет .png на .jpeg?

184
07 апреля 2018, 19:59
  1. Я сохраняю .png картинку в iPad (iOS 7.1.1)
  2. Я загружаю эту картинку из iPad в свой скрипт, но $_FILES['userfile']['type'] почему-то показывает - image/jpeg
  3. Если я загружаю картинку на Яндекс.Диск, приложение правильно определяет что это .png

Вопросы:

  1. Почему так происходит? С компьютера и с телефона - загружается с правильным типом.
  2. Как правильно определить mime тип загружаемого файла? Как это удаётся Яндекс.Диску?

Примечание:

Функция getimagesize тоже показывает что загружаемый файл - image/jpeg

UPD:

Я заметила что качество изображения ухудшается. Думаю, при сохранении iPad сохраняет и оригинал и сжатый .jpg (чтобы показывать на своём экране). Наверное, приложение Яндекс.Диск просто имеет доступ к оригиналам изображений, а вот через форму загрузки файлов в браузере отправляются сжатые .jpg копии.

Если всё так, тогда вопрос - как сделать так, чтобы пользователи сайта могли загружать оригинальные изображения со своих айпадов, а не ухудшенные копии?

Answer 1

Никогда не доверяйте на 100% $_FILES['upfile']['mime'] всегда используйте fileinfo, это мне помогло.

Core PHP(http://php.net/manual/en/features.file-upload.php):

$finfo = new finfo(FILEINFO_MIME_TYPE);
$checkMimeFile = array_search(
    $finfo->file(
        $_FILES['upfile']['tmp_name']
    ),
    [
        'jpg' => 'image/jpeg',
        'png' => 'image/png',
    ],
    true
)
if (false === $checkMimeFile) {
    throw new RuntimeException('Invalid file format.');
}
READ ALSO
Маршалинг типа char** в приложение C#

Маршалинг типа char** в приложение C#

Имеется функция в dll, которая создает массив строк внутри себя и возвращает его + количеств элементов по указателю в аргументе(С++):

194
ClickOnce смена url установки

ClickOnce смена url установки

Добрый деньВ ClickOnce пытаюсь консольно сменить Installation Folder

188
Установка WPF Themes

Установка WPF Themes

Скачал стили панели элементов windows form C# для visual studio, но не знаю куда кидать файлыКачал отсюда-->WPF Themes

148
Как создать универсальный класс

Как создать универсальный класс

Подскажите пожалуйста! Я в DataSet ResultData гружу данные из БДА затем выбираю их в массив, который потом прикручиваю к комбобоксу в качестве источника...

198