Как разрешить расширения файлов в верхнем регистре в фото-загрузчике?

Я пытаюсь оптимизировать свой загрузчик фотографий, чтобы он разрешал все расширения файлов, включая прописные буквы .JPG/.JPEG или .PNG.

Я пытался поместить strtolower() в переменную $extension, но безуспешно. И много других решений, ничего не помогает. Здесь я фильтрую имена расширений:

Только что установил exif и mbstrings .dll. Теперь я получил эту ошибку:

имя файла exif_imagetype() не может быть пустым

   // FILE EXTENSION FILTER     
   $allowed_types = array(IMAGETYPE_GIF,IMAGETYPE_JPEG,IMAGETYPE_PNG);
   if(in_array(exif_imagetype($_FILES["uploaded_file"]["tmp_name"]), $allowed_types)){
   
         // SUCCSESFUL

Любая помощь приветствуется! Я пытался сделать эту работу уже несколько часов :D


person user3103188    schedule 18.01.2014    source источник
comment
$extension = strtolower(end($temp)); должен сделать трюк. Вы уверены, что сделали это?   -  person Justin Iurman    schedule 19.01.2014
comment
Лучший способ найти расширение — использовать pathinfo(): pathinfo($_FILES['uploaded_file']['name'], PATHINFO_EXTENSION).   -  person George Brighton    schedule 19.01.2014
comment
@ Джастин, да любым мыслимым образом. Поверь мне :) @ Джордж, спасибо, я попробую через минуту!   -  person user3103188    schedule 19.01.2014
comment
Вместо того, чтобы проверять расширение файла или MIME-тип, который может быть чем угодно для законного или неразрешенного файла, вы должны проверить сам файл. См. stackoverflow. ком/вопросы/16802079/   -  person Musa    schedule 19.01.2014
comment
@ Муса, спасибо, это может быть моим решением. Проверьте мое редактирование ^^ Можете ли вы помочь мне с этой ошибкой? Основным преимуществом этого способа является то, что мой код становится короче, И безопасность, никакие неприятные сценарии не будут проходить через этого плохого парня! :D   -  person user3103188    schedule 19.01.2014
comment
Похоже, $_FILES["uploaded_file"]["tmp_name"] пусто. Сделайте var_dump $_FILES, чтобы увидеть, что происходит. Также не ставьте пробел между знаком @ и именем человека. @musa не @ Musa   -  person Musa    schedule 19.01.2014


Ответы (2)


Используйте функцию strtolower() для расширения нижнего регистра перед проверкой;

     // FILE EXTENSION FILTER       
     $allowedExts = array("gif", "jpeg", "jpg", "png");
     $temp = explode('.',$_FILES['uploaded_file']['name']);       
     $extension = end($temp);

                if ((($_FILES["uploaded_file"]["type"] == "image/gif")
                || ($_FILES["uploaded_file"]["type"] == "image/jpeg")
                || ($_FILES["uploaded_file"]["type"] == "image/jpg")
                || ($_FILES["uploaded_file"]["type"] == "image/pjpeg")
                || ($_FILES["uploaded_file"]["type"] == "image/x-png")
                || ($_FILES["uploaded_file"]["type"] == "image/png"))
                && ($_FILES["uploaded_file"]["size"] < 10485760)
                && in_array(strtolower($extension), $allowedExts))
                {
                    // SUCCSESFUL
person Victor Bocharsky    schedule 18.01.2014

Я сделал что-то очень похожее на веб-сайте, который я сделал. Вот мое решение.

$file_name = $_FILES['file']['name'];
if ($_FILES['file']['size']>$maxsize) $status = "Error: Picture size too large. Max file     size is $maxsize bytes.<br>";

if (($_FILES['file']['type']!="image/gif") && ($_FILES['file']['type']!="image/pjpeg") && ($_FILES['file']['type']!="image/jpeg") && ($_FILES['file']    ['type']!="image/png")){
$status .= "Error: Wrong file type. Must be JPG or GIF or PNG only.<br>";
}



$picextorg = substr($file_name,-3);
$picext = strtolower($picextorg);

if ((!isset($status)) && ($picext!="gif")&& ($picext!="jpg") && ($picext!="png"))    $status .= "Error: The Wrong file type. Must be JPG or GIF or PNG only.<br> ";

Я не думаю, что было бы очень сложно реализовать это с вашим кодом. Дайте мне знать, как это происходит!

person Alex Bridges    schedule 18.01.2014