|
|
|
| Загружаю картинки, на сервере принимаю и смотрю формат:
$file_type = $_FILES['logo']['type'];
$ttype = explode ("/",$file_type);
$mytype = $ttype[1];
|
т.е. $mytype мне нужно чтоб было строго картинка, какая проверка в данном случае будет самой эффективной, которая не пропустит даже txt файлик например сохраненный как mytxt.gif ? | |
|
|
|
|
|
|
|
для: Blizard
(10.08.2009 в 11:13)
| | Возможно я некорректно задаю вопрос...
На сколько хорошо делать так:
if(($mytype!="gif")&&($mytype!="jpg")&&($mytype!="png")) exit("неверный формат");
|
Как проверить txt файл сохраненный как txtfile.gif ? | |
|
|
|
|
|
|
|
для: Blizard
(10.08.2009 в 12:30)
| | Можно применить функцию imagecreatefrom* на файл. И если вернётся валидный ресурс, то файл дйствительно картинка. | |
|
|
|
|
|
|
|
для: Саня
(10.08.2009 в 12:59)
| | А с какими параметрами, интересно, картинка будет создаваться?
Тогда уж проще запросить, скажем, ширину картинки. И, если вернется, значит картинка, если ошибка будет - знач фигня какая-то | |
|
|
|
|
|
|
|
для: neadekvat
(10.08.2009 в 13:10)
| | А если ширина вернется, а картинка - нет? :) | |
|
|
|
|
|
|
|
для: Blizard
(10.08.2009 в 11:13)
| | по-моему лучше проверять через
<?php
$size = getimagesize($_FILES['file']['tmp_name']);
//там вернет массив какое расширение у этого файла, mime типы, размер сторон и другое
//дополнительно gif к примеру можно проверить так
$file = file_get_contents($_FILES['file']['tmp_name']);
$string = substr($file, 0, 3);
if ($string=='GIF'){..
// то есть читаем первые символы в самом файле хотя это наверно лишнее.
?>
|
| |
|
|
|
|
|
|
|
для: Visavi
(10.08.2009 в 13:22)
| | >$file = file_get_contents($_FILES['file']['tmp_name']);
>$string = substr($file, 0, 3);
Э-э...
Вы хорошо подумали?
чтобы проверить сигнатуру, красная цена которой 6 байт, Вы будете весь файл в память тащить?
На конюшне пороть за такие решения. | |
|
|
|
|
|
|
|
для: Blizard
(10.08.2009 в 11:13)
| | так не должно работать.
получается, что ты делаешь проверку
"если mytype не равно gif И если mytype не равно jpg И ...", тут надо использовать " || " (ИЛИ) вместо " && ".
потом надо всё таки писать не " gif ", а " image/gif " и так далее.
вот пару вариантов как можно сделать
<?php
if(substr($_FILES['filename']['type']),0,5) == 'image'){
//продолжаем загрузку
}
else{
// выводим сообщение с предупреждением
}
//или можно сделать так
//извлекаем из имени файла расширение
$ext = strtolower(strrchr($_FILES['filename']['name'], " . "));
// массив разрешённых расширений
$exttentions = array('.jpg','.gif');
// проверка входитли данное расширение в список допустимых
if(in_array($ext, $exttentions)){
//продолжаем загрузку
}
else{
// выводим предупреждение
}
?>
|
| |
|
|
|
|
|
|
|
для: Slo_Nik
(10.08.2009 в 13:25)
| | Нет, с логикой как раз в моем примере все верно, если ставить (или) то все условия никогда не будут истинны одновременно.
Я забыл сказать что по контексту картинка грузится довольно приличных размеров, поэтому сделал так
$size = $_FILES["logo"]["size"];
if(($mytype!="gif")&&($mytype!="jpg")&&($mytype!="png")&&($mytype!="jpeg")&&($mytype!="GIF")&&($mytype!="JPG")&&($mytype!="PNG")&&($mytype!="JPEG")||($size<50))
exit("Вы пытаетесь загрузить файл с запрещенным форматом! К загрузке допустимы только форматы jpg, gif и png");
Вроде работает как нужно, потестировал. Как сделать чтобы в прверке можно было писать только нижний регистр? А то если грузить PNG формат, а в проверке оставить только png то выбивает ошибку. | |
|
|
|
|
|
|
|
для: Blizard
(10.08.2009 в 13:42)
| | Я не верю, что ваш код работает.
Стоит кучу "И", это значит, что все значения должны быть истины. Как вы этого добились?
И потом, у вас либо расширение должно быть вот эти все сразу, либо размер меньше 50. Видимо, поэтому и работает скрипт.
И потом, если 50 - это мегабайты, то возникает два вопроса: сделали ли вы так, чтобы можно было загружать 50 мб (по умолчанию, по-моему, намного меньше можно файлы загружать), и что за картинки такие сумсшедшие?
Ах ты ж черт, != не увидел.
В любом случаи, по логике, размер файла должен быть больше 50, а не меньше.
Чертовщина какая-то. Не дай бог кому-нибудь после вас с этим кодом работать. | |
|
|
|
|
|
|
|
для: neadekvat
(10.08.2009 в 13:54)
| | >Я не верю, что ваш код работает.
>Стоит кучу "И", это значит, что все значения должны быть истины. Как вы этого добились?
Выведите промежуточные значения - увидите, что с логикой всё в порядке.
Если не считать утерянной возможности загружать gif и png короче 50 байт. | |
|
|
|
|
|
|
|
для: Trianon
(10.08.2009 в 13:56)
| | Да, я уже дополнил пост. | |
|
|
|
|
|
|
|
для: neadekvat
(10.08.2009 в 14:01)
| | Расчет не в мегабайтах, а в байтах, картинки размером 400x100 уж точно будут больше 50 байт, а вот файлы почти всегда будут меньше, да и врядли хакер сразу станет лить огромный файл, начнет с <? echo("Hello world"); ?> =)) | |
|
|
|
|
|
|
|
для: Blizard
(10.08.2009 в 14:06)
| | Если этот "хакер" впервые в жизни открыл учебник по программированию - то да, начнет он именно с этого. | |
|
|
|