Примечание: во-первых, я понимаю, что 99% разработчиков PHP используют оператор подавления ошибок (я был одним из них), поэтому я ожидаю, что любой PHP-разработчик увидит, что это не согласуется.
Как вы считаете, действительно ли используется оператор @ для подавления ошибки/предупреждения на PHP, тогда как вы можете обрабатывать ошибку?
Короткий ответ:
Нет!
Longer более правильный ответ:
Я не знаю, как я не знаю все, но до сих пор я не сталкивался с ситуацией, когда это было хорошим решением.
Почему это плохо:
В то, что я думаю, что около 7 лет, используя PHP теперь я видел бесконечные отладки агонии, вызванной оператором подавления ошибок и никогда не сталкивался с ситуацией, когда это было неизбежно.
Проблема в том, что фрагмент кода, который вы подавляете ошибки, в настоящее время может вызывать только ошибку, которую вы видите; однако, когда вы меняете код, на который полагается подавленная линия, или среда, в которой она выполняется, тогда есть все шансы, что линия попытается вывести совершенно другую ошибку из той, которую вы пытались игнорировать. Тогда как вы отслеживаете ошибку, которая не выводится? Добро пожаловать в отладку ада!
Мне потребовалось много лет, чтобы понять, сколько времени я трачу каждые пару месяцев из-за подавленных ошибок. Чаще всего (но не исключительно) это было после установки стороннего скрипта/приложения/библиотеки, которая была безошибочной в среде разработчиков, но не моя из-за разницы в конфигурации сервера или сервера или отсутствовала зависимость, которая могла бы нормально вывести ошибку немедленно предупреждая о проблеме, но не тогда, когда разработчик добавляет magic @.
альтернатив (в зависимости от ситуации и желаемого результата):
Handle фактической ошибки, что вы в курсе, так что, если кусок кода будет вызывать определенную ошибку, то она не выполняется в в этой конкретной ситуации. Но я думаю, что вы получаете эту часть, и вы просто беспокоились о том, что конечные пользователи видят ошибки, и это то, что я сейчас адресую.
Для регулярных ошибок вы можете настроить обработчик ошибок так, чтобы они отображались так, как вы хотите, когда вы просматриваете страницу, но скрыты от конечных пользователей и регистрируетесь, чтобы вы знали, какие ошибки запускают ваши пользователи.
Для фатальных ошибок установите display_errors
в выключенном состоянии (ваш обработчик ошибок по-прежнему запускается) в вашем php.ini и включите ведение журнала ошибок. Если у вас есть сервер разработки, а также живой сервер (который я рекомендую), этот шаг не требуется на вашем сервере разработки, поэтому вы можете отлаживать эти фатальные ошибки, не прибегая к просмотру файла журнала ошибок. Есть даже trick using the shutdown function, чтобы отправить большое количество фатальных ошибок вашему обработчику ошибок.
В целом:
Пожалуйста, избегайте этого. Для этого может быть веская причина, но я еще не видел ее, поэтому до сих пор мое мнение о том, что оператор подавления ошибок (@) является злым.
В справочнике PHP вы можете прочитать my comment on the Error Control Operators page, если хотите получить дополнительную информацию.
Ваш пример не работает; «Файл не найден» - это не единственный способ, с помощью которого fopen() может выйти из строя. Возможно, файл не читается. Возможно, это открыто другим процессом. Условия ошибки зависят от платформы, и в любом случае вы можете не тратить время на то, чтобы задуматься о случаях отказа. – 2008-09-26 01:45:27
см. Также: http://stackoverflow.com/questions/1087365 – dreftymac 2011-10-11 17:33:31
и почему взломать этот вопрос закрыт ?? – GOD 2013-05-04 18:11:07