2013-11-14 2 views
1

Мой английский не очень хороший, извините.

Я работаю с языком PHP и у меня проблема с загрузкой изображения профиля Мой код фильтрует изображения по типу еще на сервере У меня есть файлы, которые не относятся к типам, всегда из одного и того же IP-адреса.

Я думаю, что это из-за моего типа проверки, но я не уверен. Пожалуйста помоги!

$bild = array('jpg', 'jpeg', 'png', 'gif'); 
if (in_array($_FILES['image']['type'], $bild) { 
    mysqli_laden($_FILES); 
} 
+2

Могут быть, [это] (http://www.php.net/manual/de/reserved .variables.files.php # 109902) помогает: «Никогда не доверяйте' $ _FILES ["image"] ["type"] '. Он принимает все, что отправлено из браузера, поэтому не доверяйте этому для изображения Я рекомендую использовать [finfo_open] (http://www.php.net/manual/en/function.finfo-open.php) « – kero

ответ

2

Я предполагаю, что mysqli_laden - это настраиваемая функция, которая загружается на сервер. Будьте осторожны при использовании $ _FILES ["image"] ["type"], поскольку он получает информацию из браузера, а не сам файл. Вы должны использовать гораздо более надежную функцию finfo_open, которая будет проверять тип файла MIME. Проверьте это здесь: http://www.php.net/manual/en/function.finfo-open.php

Вашего код будет выглядеть примерно как этот

$bild = array('image/jpg', 'image/jpeg', 'image/png', 'image/gif'); 
$image = $_FILES['image']['type']; 
$finfo = new finfo(FILEINFO_MIME); 
$image_inf = $finfo->file($image); 

if (in_array($image_inf, $bild) { 
    mysqli_laden($_FILES); 
} 

Надеется, что это помогает

+0

Не уверен, но я думал, что это файл $ finfo-> (FILEINFO_MIME, $ image); ' – putvande

+0

@putvande: Нет. http: //us1.php. net/finfo_file или '$ finfo = new finfo (FILEINFO_MIME); $ image_inf = $ finfo-> file ($ image); ' – AbraCadaver

+0

Вы правы, смотрели на неправильную функцию. – putvande

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