Насколько корректна строчка

samb100

Новичок
Насколько корректна строчка

Извиняюсь за дурацкий вопрос, но меня гложут сомнения,
насколько корректна такая строчка:

$_FILES['userfile']['name'] = strtolower($_FILES['userfile']['name']);

- это перевод названия загружаемого файла в нижний регистр.

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

P.S. код рабочий.
 

crocodile2u

http://vbolshov.org.ru
Это нормально. Немного моветон, что ли, но в целом нормально.
 

Crys

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

Духовность™

Продвинутый новичок
Вопрос в том, ЧТО будет дальше с $_FILES. Если этот код используется где-то в конфиге, а потом клиент будет гадать, почему FILES содержит некорректные данные, то это естественно плохо.
 

iceman

говнокодер
samb100
пиши в свою переменную и дальше ее юзай, глобал не трогай..
 

samb100

Новичок
triumvirat
..дальше идет переименовывание картинки
проверка расширения файла
проверка на миме
уменьшение картинки
запись в файл
и запись пути к картинке в БД... и всё
 

iceman

говнокодер
не трогай массив $_FILES
создай сво массив и работай с ним, и пиши туда чо хочешь...
 

crocodile2u

http://vbolshov.org.ru
В общем да, правильно люди советуют создать отдельную переменную для имени в нижнем регистре.
 

lart

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

ХакИрФсимагущий

[засикречино]
Автор оригинала: triumvirat
Вопрос в том, ЧТО будет дальше с $_FILES. Если этот код используется где-то в конфиге, а потом клиент будет гадать, почему FILES содержит некорректные данные, то это естественно плохо.
Нет вопрос в том, что было до этого с Фаилс и что Php делает с файлом во время переименования. Так как мне еше не приходилось встречатся с тем как это работает то скажу, как сказали многие. запсыай в отдельную переменную.
А с точки зрения безопасности тоже не могу ниче сказать так как незнаю где сохраняет php этот временный фаил и можно ли в него чтото засунуть так чтобы это выполнялось
На мой взгляд вносить изменения в суперглобальные массивы - некорректно. Но у каждого свои понятия корректности, красивости и правильности...
Ну вот я например для зашиты моего сайта от внедрения xss и иньекций изменяю супер глобальные массивы. Причем мое решение зашиты очень даже красивое и быстрое и надежное и простое в установки
 

iceman

говнокодер
ХакИрФсимагущий
если ты "не можешь" ничо "сказать", тады ЧО "говоришь"?)

-~{}~ 05.09.10 17:15:

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

не быстрое...
 

Духовность™

Продвинутый новичок
запсыай в отдельную переменную
практика записи в отдельную переменную копий переменных суперглобальных массивов иногда носит характер идиотизма. Особенно это заметно на request-переменных, когда в сценариях полно такого вида конструкций:

PHP:
$a = $_GET['a'];
$b = $_GET['b'];
$c = $_GET['c'];
вопрос же ТС изначально стоит некорректно. $_FILES['userfile']['name'] - оригинальное имя файла на клиентской машине, загружаемое на сервер. Это имя не нужно приводить в нижний регистр, ибо если вам нужно назвать файл человекопонятным именем - его нужно ЯВНО НАЗВАТЬ - прислать через POST отдельную переменную, обозначающую имя будущего файла. Или сгенерировать его из какого-нибудь md5.
 

ХакИрФсимагущий

[засикречино]
Автор оригинала: iceman

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

samb100

Новичок
triumvirat :
его нужно ЯВНО НАЗВАТЬ - прислать через POST отдельную переменную, обозначающую имя будущего файла. Или сгенерировать его из какого-нибудь md5.

Кстати, хорошая мысль... а то не дело,
когда юзерский файл, хоть и в нижнем регистре (вдруг там на самом деле название на иврите написано)
попадает на сервер, и затем уже обрабатывается...

из POST лучше в hidden передавать ?

у меня там дальше по скрипту проверяется расширение файла gif или jpg...

ЗЫ. файл я переименую, но расширение файла от юзера может быть разным
 

Духовность™

Продвинутый новичок
из POST лучше в hidden передавать ?
я передаю в input=text, причем все кириллические символы на этапе обработки строки этой строки PHP транслируются в латинские - можно указывать имя файла на русском. Иврит и т.п. априори отсекается.

ЗЫ. файл я переименую, но расширение файла от юзера может быть разным
да и хрен с ним, с расширением. getimagesize() получает тип файла. Если тип не подходящий - до свидания. Иначе файл сохраняется на диск с тем расширением, с каким ассоциируется данный тип файла.
 

samb100

Новичок
triumvirat
я передаю в input=text

т.е. ты руками вводишь название картинки, не ?
 

Духовность™

Продвинутый новичок
т.е. ты руками вводишь название картинки, не ?
я выбираю картинку с помощью стандартного input=file. Рядом, в соседнее поле "имя файла" типа input=text, автоматически подставляется имя файла на машине пользователя без расширения (c помощью JS). Если мне нужно задать иное имя файла, я задаю его руками, да - именовать картинки полезно для SEO. Кроме того, у меня рядом конопочка, нажав на которую в поле "имя файла" подставляется текущий timestamp - это для случаев, когда надо назвать файл уникальным именем.
 
Сверху