Зачем нужна @ в php

@

  • за

    Голосов: 6 19,4%
  • против

    Голосов: 25 80,6%

  • Всего проголосовало
    31

Вурдалак

Продвинутый новичок
причем в данном конкретном случае надо проверять файл на существование.
Это неправославно, потому что, как уже сказали, файл может быть удалён в момент между проверкой и удалением. А в случае с unlink() для нас операция атомарна: внутри происходит фактически такая же проверка, но подобного race condition произойти не может.
 

Вурдалак

Продвинутый новичок
Другое дело что в пхп есть несколько говнофункций, которые при штатной работе выдают ошибки - getimagesize, parse_str (одну из них недавно кажется починили), socket_connect видимо ещё - здесь да, надо извращаться. но опяь же - не собакой.
При какой штатной ситуации они генерируют ошибку?
 

A1x

Новичок
Это работало бы, если бы все ошибки в пхп были исключениями по дефолту. И кстати я не вижу различия между таким тупым try-catch и @...
try {...} catch(...) { error_log() }

а по дефолту
display_errors = off
log_errors = on
 

itprog

Cruftsman
Absinthe
я уже писал раньше. Если handler это класс, а пути к классам закэшированы где-то.
 

itprog

Cruftsman
Вурдалак
а ничем, просто это отметает аргумент о том, что собака нужна.
Или противоположный аргумент, раз отличий нет, значит это просто сокращение для try-catch
 

Вурдалак

Продвинутый новичок
itprog, ты можешь вручную обработчик ошибок подключить (как ты это делаешь с autoloader-классом).

Или противоположный аргумент, раз отличий нет, значит это просто сокращение для try-catch
По естественным причинам, запретить использовать @ в других случаях невозможно, поэтому лучше полностю выпилить это (в идеале).
 

itprog

Cruftsman
Absinthe
Кастомный автолоадинг, не везде всегда 5.3 был. APC здесь не поможет.
 

A1x

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

в крайнем сл. handler не грех загрузить и прямым инклудом
 

itprog

Cruftsman
Absinthe
Неймспейсов в 5.3 не было. Приходилось реализовывать свою логику поиска файла с классом.
 

Absinthe

жожо
Неймспейсов в 5.3 не было. Приходилось реализовывать свою логику поиска файла с классом.
PEAR style успешно решало проблему. Использование стека autoload-функций(которому более 6 лет) успешно решало проблему.
Вот тебе и 2 нормальных решения.
 

itprog

Cruftsman
Absinthe
Не всех устраивает PEAR style %) И все же, я не спрашиваю о том, как сделать автолоад.
 

Фанат

oncle terrible
Команда форума
Это неправославно
Такое ощущение, что незаметно подкралась машина времени и увезла меня в год 1998.
Не могу поверить, что вижу такие дискуссии в 2012-м.

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

Ловля ошибок к этому отношения не имеет.
Файл надо проверять.

ЕСЛИ при наличии такой проверки логи будут прям забиты сообщениями об ошибках удаления файлов, исчезнувших между проверкой и удалением - ТОЛЬКО ТОГДА надо начинать думать, как с этой ошибкой бороться.
 
  • Like
Реакции: A1x

fixxxer

К.О.
Партнер клуба
Файл мог не удалиться по разным причинам, а не только ввиду его отсутствия. Например, из-за отсутствия прав. А отсутствие прав на удаление файлов, которые предназначены для чтения-записи из-под пользователя, под которым работает php - это явная причина разобраться, в чем дело.

if exists + unlink, try-catch с проверкой на текст - не суть важно. Важно, что в логах такая ерунда должна отражаться.
 

Вурдалак

Продвинутый новичок
Файл мог не удалиться по разным причинам, а не только ввиду его отсутствия. Например, из-за отсутствия прав. А отсутствие прав на удаление файлов, которые предназначены для чтения-записи из-под пользователя, под которым работает php - это явная причина разобраться, в чем дело.

if exists + unlink, try-catch с проверкой на текст - не суть важно. Важно, что в логах такая ерунда должна отражаться.
Вот именно поэтому try-catch и лучше: нет race condition и не надо каждый раз перечислять в if'е все возможные причины (как ты сам сказал не только exists, а ещё проверка прав и что-там-ещё-знает-только-система).

Инкапсуляция, товарищи, инкапсуляция! Я не хочу знать все возможные причины, unlink сам их знает.

P.S. Не хочу никого обидеть, но, по-моему, как раз кто-то застрял в 98-ом.
 
Сверху