Загрузить изображение iphone без расширения (PHP)

В моем php-коде я обрабатываю изображение, загруженное из другого источника: настольного, мобильного и т. д. Обычно изображения приходят в формате PNG или JPG, но я заметил, что изображения, сделанные с IOS/Iphone (возможно, и с Android), идут без расширения и только как "изображение". Я попытался повторно обработать изображение после его загрузки на сервер (с помощью exif_imagetype и getExtension(), чтобы проверить, является ли файл изображением и является ли он расширением, чтобы иметь возможность добавить его, если оно отсутствует в соответствии с его обнаруженным типом. Но я не получается, так как мой скрипт принимает только PNG или JPG. Что было бы наиболее эффективным и простым способом решить эту проблему?

Вот мой код:

if (!empty($_FILES['file']['name'])){
    $uploadedFile = '';
    if (!empty($_FILES["file"]["type"]))
    {
        $valid_extensions = array("jpeg", "jpg", "png");
        $temporary = explode(".", $_FILES["file"]["name"]);
        $file_extension = end($temporary);
        if ((($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/jpg") ||
         ($_FILES["file"]["type"] == "image/jpeg")) && in_array($file_extension, $valid_extensions))
        {
            $filetype=$_FILES["file"]["type"];
            $sourcePath = $_FILES['file']['tmp_name'];
            $targetPath = "upload/".$fileName;
            $temp = explode(".", $_FILES["file"]["name"]);      
            $newfilename = 'code' . '.' . end($temp);           
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);

        }
    }

Поскольку имя файла и его расширение предоставляются пользователем, этой информации нельзя доверять. Вы должны использовать что-то вроде Fileinfo::mime_content_type, чтобы убедиться, что предоставленный файл на самом деле является изображением, прежде чем пытаться рассматривать его как единое целое.

S. Imp 21.02.2019 20:15
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
1 536
1

Ответы 1

Некоторые образы на устройствах IOS имеют heic [https://en.wikipedia.org/wiki/High_Efficiency_Image_File_Format], это живые образы.

Итак, вы что-то загружаете, и когда вы проверяете расширение и тип пантомимы, скрипт пропускает и переходит к концу, если вы поместите оператор else, вы можете сообщить пользователю и узнать, что файл, который они отправляет, несовместим.

if ((($_FILES["file"]["type"] == "image/png") || ($_FILES["file"]["type"] == "image/jpg") ||
         ($_FILES["file"]["type"] == "image/jpeg")) && in_array($file_extension, $valid_extensions))
        {
            $filetype=$_FILES["file"]["type"];
            $sourcePath = $_FILES['file']['tmp_name'];
            $targetPath = "upload/".$fileName;
            $temp = explode(".", $_FILES["file"]["name"]);      
            $newfilename = 'code' . '.' . end($temp);           
            move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $newfilename);

        }else{
            print "Invalid File Format :" . $_FILES["file"]["type"];

        }

Что ж, файл определяется как jpg, и при добавлении расширения jpg он отлично читается! Так что на самом деле бесполезно пропускать изображения iOS, поскольку их также необходимо загружать!

R_life_R 21.02.2019 20:47

Спасибо за бесполезное голосование. На данный момент у нас нет класса или поддержки для редактирования heic-изображений с php. Вот почему я указываю на это.

Vidal 21.02.2019 20:53

Другие вопросы по теме