В моем 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);
}
}






Некоторые образы на устройствах 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, поскольку их также необходимо загружать!
Спасибо за бесполезное голосование. На данный момент у нас нет класса или поддержки для редактирования heic-изображений с php. Вот почему я указываю на это.
Поскольку имя файла и его расширение предоставляются пользователем, этой информации нельзя доверять. Вы должны использовать что-то вроде Fileinfo::mime_content_type, чтобы убедиться, что предоставленный файл на самом деле является изображением, прежде чем пытаться рассматривать его как единое целое.