Проверка расширений изображения при закчке

DenVeroid

Новичок
Проверка расширений изображения при закчке

значит так, делая проверку при закачке изображения на сервер с компа
имеется массив разрешаемых расширений
PHP:
$img_type = array("gif","jpg","jpeg","png");
далее идёт проверка
PHP:
 $img='gif';
 foreach($img_type as $key_img=>$value_img)   {
            if($value_img==substr($img,-3,3) or $value_img==substr($img,-4,4))
            {
            // здесь происходит закачка изображения
            }
            else
            {
                echo("такое расширение изображения недопустимо!!!");
            }

 }
но почемуто условие чередуется, сперва закчивается потом выводиться сообщение, что нетак делаю?
 

iliah

Новичок
закачка-то происходит одного файла, а цикл выполняется у тебя четыре раза

-~{}~ 30.06.04 21:15:

а где ты используешь $key_img ( foreach($img_type as $key_img=>$value_img) )???

для данного случая имхо уместней [M]in_array[/M]
 

neko

tеam neko
DenVeroid

1. зачем substr() если у тебя в $img уже лежит разрешение целиком.
2. так-как ты не показал как именно ты закачиваешь, сказать ничего точно нельзя
3. ты пользуешься gd?

-~{}~ 30.06.04 21:17:

да смысл гадать может у него там в мифической "закачке" break стоит.
 

DenVeroid

Новичок
цикл я использую для перебора массива содержищие разрешонных расширений, если у закчиваемаемой картинки имеется другое расширение отличное что в масиве то должно произойти остановка
 

neko

tеam neko
короче делай флаг

и вообще лучше пользоваться exif_imagetype()
проще добавить другие проверки
а по расширению что-то определять это дурная практика
 

DenVeroid

Новичок
закачиваю при помощи функции move_uploaded_file()

про переменную $img я забыл просто тестировал по разному, вообщем эта переменная содержит имя файла с расширением пример: image.gif
а функцией substr() я узнаю какое расширение закачиваемой картинки

in_array() так это функция делает проверку, есть ли в масиве элементы или нет, и больше ничего
 

Макс

Старожил PHPClub
и делать не через цикл, а через [m]in_array[/m]

-~{}~ 30.06.04 21:36:

in_array() так это функция делает проверку, есть ли в масиве элементы или нет, и больше ничего
ну и ?
А тебе что надо ? Узнать есть ли такое расширение в массиве или нет и больше ничего
 

IL78

Guest
DenVeroid

все-таки послушай совета neko - проверяй не расширение, а реальный тип картинки через [m]exif_imagetype[/m] или [m]getimagesize[/m]. Расширение легко подделать.
 

DenVeroid

Новичок
Maxim Matyukhin, хм, и правдо, я даже и неподумал, сразу со своим циклом полез, спасибо

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

SiMM

Новичок
Автор оригинала: IL78 проверяй не расширение, а реальный тип картинки через exif_imagetype
Для этого нужно PHP>=4.3.0 + поддержка exif
Этому, если не ошибаюсь, как и обычным строковым функциям, ничего дополнительно не нужно
Расширение легко подделать.
Ну и? Это ни чем не грозит. Если, конечно, не пытаться выводить картинки при помощи include ;)
 

neko

tеam neko
во-первых грозит
в экплорере был когда-то какой-то баг, который воспроизводил например js засунутый в картинку
т.е. просто вместо самой картинки код суешь и он его играет.

во-вторых это по большей части вопрос не безопастности, а логики. расширение вобщем-то мало о чем говорит. и под одним и тем же расширением могут например подаваться например разные версии одних и тех же форматов итд итп

кроме того, сам понимаешь, если проверяется расширение заливаемого файла, это не единственное ограничение, которое на файлы накладывается

короче коли уж есть функция для проверки заголовков, лучше пользоваться ей.
 
Сверху