2017-01-05 13 views
0

Как проверить, загружен ли файл с файлом исключительно изображение, а не видеофайл и что-нибудь еще?Как определить, не загружен ли загруженный файл?

Я проверил простой код, который будет проверять, является ли загруженный файл изображением.

форма

<form method="post" enctype="multipart/form-data"> 
    <input type="file" name="photo" accept="image/*"> 
    <input type="submit" name="submit" value="Test"> 
</form> 

Хотя у меня есть accept="image/*", я могу легко изменить его All types и получить файл без изображения.

код, чтобы проверить, если файл является изображение (Это только для тестирования)

if($_POST['submit']) { 
    $tmp_file = $_FILES['photo']['tmp_name']; 
    if(mime_content_type($tmp_file)) { 
     var_dump(mime_content_type($tmp_file)); 
    } else { 
     echo 'error1'; 
    } 
    if(getimagesize($tmp_file)) { 
     var_dump(getimagesize($tmp_file)); 
    } else { 
     echo 'error2'; 
    } 
} 

В настоящее время у меня есть 3 теста на это, 2 прошло 1 не удалось:

  1. Тестирование изображения = прошло.
  2. Тестирование без изображения действует .srt файл = принят (выдает ошибку в getimagesize)
  3. Testing действительный видеофайл .mp4 = не удалось (после представления, она ЗАГРУЗКА на 5-10 секунд и не дает ошибок)

Что мне нужно для этого? Я не знаю, в чем проблема, потому что она не дает никаких результатов как от var_dump(), так и от echo 'errors'. Теперь я думаю, что PHP принимает этот файл.

Примечание

мне нужно сделать это так, что только действительное изображение будет загружено.

Примечание 2

Принятый ответ на маркированной вопросе не работает со мной.

Update

Если я пытаюсь загрузить видео, которое меньше 128M она возвращает что-то. Но если он больше 128M, он ничего не получает в моем localhost, но я тестировал его на рабочем сайте, он дает мне REQUEST TIME OUT.

+1

файл изображения имеет ограниченное расширение, как .jpg, .jpeg, .png, .gif и т.д. Вы можете проверить их –

+0

это не безопасно полагаться на расширение, что пользователь данного. –

ответ

1

расширение поиск файла, как это и проверить допустимых типов ...

function getextension($name){ 
    $count=substr_count($name,"."); 
    if($count>1){//some cases have two dotes 
     $name= preg_replace('/\.(?=.*\.)/', '_', $name); 
    } 
    list($txt, $ext) = explode(".", $name); 
    return $ext; 
} 

$name = $_FILES['imageupload']['name'];//Name of the File 
$image_extension = getextension($name); 

$allowed_extension = array("jpg", "png", "gif", "bmp", "jpeg","JPG","PNG","GIF","BMP","JPEG"); 
$image_extension=getextension($name); 
    if (!in_array($image_extension, $allowed_extension)) { 
    $error_flag = 1; 
    $message = "Invalid File Format"; 
} 
+0

Я искал и читал о том, чтобы не доверять расширению файла, заданному пользователем. –

1

Синтаксический и проверки расширения не достаточно, так как в точках вопрос к.

Я предлагаю проверить файл EXIF ​​(информация об имеющемся в обращении виде) данные после загрузки файла.

Вы можете поместить базовую проверку на основе расширения, а после этого, если это удастся, проверьте exif данные изображения.

Для этого вам понадобится отдельная DLL для загрузки, которая будет иметь связанную с exif функцию.

http://php.net/manual/en/ref.exif.php

+0

Вы имеете в виду, что я получил расширение, предоставленное пользователю файлу? –

+0

Я не мог понять вашу точку зрения, мое среднее - это проверить детали EXIF ​​для тех, где ваш тестовый пример терпит неудачу. – developerCK

Смежные вопросы