Алекс Б.
4 сообщения
#14 лет назад
Благодарю всех за ответы! Проверка наличия файла необязательна - известно точно, что такой файл имеется.
Володимир П.
164 сообщения
#14 лет назад
@unlink -> говнокод
Роман П.
1599 сообщений
#14 лет назад
Metallica, ты чо по-русски заговорил-то внезапно? Пиши "говнiкiд" ))
Виталий О.
403 сообщения
#14 лет назад
Гівнокод, если на то пошло))
Роман Беляев
16382 сообщения
#14 лет назад
Цитата ("raznomir2"):
Да и вообще код должен быть чистым, а не абы как.

+1. Подавлять вывод ошибок - паршивая практика. И дело тут не в производительности.

tvv, как всегда описывает максимально качественный вариант.
Роман П.
1599 сообщений
#14 лет назад
Цитата ("frig"):
как всегда описывает максимально качественный вариант.

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

Теория это хорошо, но практика это несколько другое. Ответьте мне на один вопрос, конкретно из моей практики: есть блоговый движок со всякими сервисами, практически ежесекундно заливаются, генерятся изображения и удаляются старые (например, аватарки). По вашему, необходимо делать всевозможные проверки перед удалением аватарки - права доступа, результат удаления, наличие эксклюзивных блокировок и т.д. и т.д., что описан tvv? Если да - то вы психи, я перестаю спорить и оставляю вас фапать на ваш совершенный код. По моему же мнению, гораздо менее затратно, легче для последующих доработок движка и прочего - просто делать @unlink и раз в какое-то время чистить файлохранилище от файлов, которые почему-то не удалились, например (да, такое бывает, ваша мегасистема бы наверное отловила это, ага).
Наталия Б.
1809 сообщений
#14 лет назад
Цитата ("Crist"):
По вашему, необходимо делать всевозможные проверки перед удалением аватарки


В данном случае делать проверку существования файла нет смысла, ибо весьма маловероятно, что файл аватарки испарится в период между нажатием кнопки пользователя "Удалить аватарку" и стартом ф-ции unlink. Я, кажется, ясно обозначила, что такие проверки на существование файла нужно делать тогда, когда в этом есть сомнения. Принцип разумной достаточности никто не отменял.
Роман П.
1599 сообщений
#14 лет назад
Цитата ("raznomir2"):
Я, кажется, ясно обозначила, что такие проверки на существование файла нужно делать тогда, когда в этом есть сомнения.

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

Короче, я не против проверок-то, естественно. И когда это нужно (например, в сервисе совместного редактирования фотографий или чего-то подобного) - они крайне, на сто процентов, необходимы. Я просто против вашего упрямого выпячивания идеального, но вредного, совершенства во всех случаях, иначе лепится ярлык говнокодера, любящего собачку ))
Вадим Т.
3240 сообщений
#14 лет назад
Оффтопик
Цитата ("Crist"):
Например, загружает пользователь аватарку, не уходит со странички, в это время модератор трет эту аватарку. А у пользователя осталась кнопка "удалить", и он ее жмет.

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

Примечание. Вообще, в подобных случаях, когда возможен конкурентный доступ к ресурсам относительно небольшого размера, более надежно и безопасно было бы использовать БД+транзакции, а не файлы. Плюс, все задачи, которые не обязательно выполнять сразу мгновенно, желательно ставить в очередь, а быстро обновлять лишь метаданные в той же БД. Так, например, для картинок часто используют файловый кеш, которым управляет отдельный процесс со своей очередью задач.
Роман Беляев
16382 сообщения
#14 лет назад
Цитата ("Crist"):
Максимально качественная по безопасности вылазка из дома на улицу - это броня, парашют, оружие, рюкзак с кучей вещей, которые теоретически могут понадобится. Тем не менее, не думаю, что кто-то из вас так снаряжается в универсам.

Я говорил о том, что tvv предлагает максимум.
В нашем случае это все равно что проверить идет/будет идти дождь или нет. И соответственно брать с собой зонт или нет. А не брать его каждый раз, независимо от того идет он или нет.

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

Цитата ("Crist"):
когда есть уверенность, что в большинстве случаев файл существует - дополнительные проверки это чушь.

Также в большинстве случаев в запросах нет инъекций, во входящем html нет вредоносного javascript, в загружаемых файлах тоже нет ничего дурного зачастую. Зачем проверки? Рази одного на 100 000 случая? Так из бэкапа восстановим, если чо.

Цитата ("Crist"):
Я просто против вашего упрямого выпячивания идеального, но вредного, совершенства во всех случаях

Правильный подход он хорош не тем, что он сам по себе правильный, а тем, что в определенный момент только этот самый правильный подход автоматически избавляет от ошибок и проблем. Говнокод - тоже работает.
Наталия Б.
1809 сообщений
#14 лет назад
Цитата ("frig"):
Говнокод - тоже работает.


Самое смешное, что говнокод действительно закрывает 99% случаев.
А стоит в 10 раз дешевле.
Но оставшийся 1% способен завалить систему при первом же случае, в этом и есть разница.
Вадим Т.
3240 сообщений
#14 лет назад
Оффтопик
Цитата ("Crist"):
Я просто против вашего упрямого выпячивания идеального, но вредного, совершенства во всех случаях, иначе лепится ярлык говнокодера, любящего собачку ))

Можно и я слово добавлю? В данном случае с @unlink и я тоже против собачки. И согласен с утверждением, что это плохой код...
Хотя я сам ещё года 3 назад иногда использовал собачку в редких случаях, например для вызова злополучной функции mail(), которая может бросать неконтролируемые нотисы и сообщения об ошибках, причем даже при полностью корректных входных параметрах. Но потом я исправился, и нашел решение как обходить даже такие проблематичные моменты. Последние годы собачку не использую вообще.
Роман П.
1599 сообщений
#14 лет назад
Цитата ("frig"):
Также в большинстве случаев в запросах нет инъекций, во входящем html нет вредоносного javascript, в загружаемых файлах тоже нет ничего дурного зачастую. Зачем проверки? Рази одного на 100 000 случая? Так из бэкапа восстановим, если чо.


Зачем вы так обобщаете и сравниваете совершенно разные вещи? Не уходите от темы. Разговор об удалении аватарки. Пожалуйста, приведите мне пример, когда ее удаление без проверки на существование может привести к ужасающим последствиям.
Роман Беляев
16382 сообщения
#14 лет назад
Цитата ("Crist"):
Пожалуйста, приведите мне пример, когда ее удаление без проверки на существование может привести к ужасающим последствиям.

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

При этом при всем ситуация, в которой надо удалить аватару которая может существовать а может и нет мне представляется с трудом. Это как вообще? Мы пытаемся удалить файл и вообще не знаем есть он там или нет? Это тоже нонсенс.