Подавление ошибок за пределы настройки ERROR_REPORTING (возможно, display_errors?)
Допустим, я в основном наследую живой сайт, который имеет много ошибок в работе, я в основном делаю перекодировку всего этого сайта, что может занять около месяца.
В некоторых случаях этот сайт зависел от внешних каналов XML-файлов, которых больше нет, но код не был должным образом настроен для предоставления красивого чистого сообщения об ошибке (существуют различные подобные обстоятельства) - клиент запрашивает это по адресу по крайней мере, эти сообщения об ошибках исчезают, даже если, например, содержимое файла xml не публикуется, поэтому мы не увидим ошибок php и пустой области на странице (так что остальная часть страницы может выглядеть "нормально").
В какой-то момент я слышал о ком-то, кто использовал set_error_handler, чтобы аннулировать некоторые случаи, когда это не является экстремальным, и у меня была идея настроить его так, чтобы он сохранял сообщения об ошибках в файле / журнале или отправлял их по электронной почте (и пытался избежать дублирования сообщений об ошибках) в основном, так что конечные пользователи не должны видеть эти ужасные вещи.
Я ищу советы от тех, кто на самом деле это сделал, так что спасибо заранее.
2 ответа
Когда в разработке, это хорошо использовать
error_reporting(E_ALL);
ini_set('display_errors', 'On');
Таким образом, вы можете сразу увидеть ошибки: это помогает их исправить.
На рабочем сервере вы не хотите отображать ошибку, поэтому:
ini_set('display_errors', 'Off');
error_reporting
может оставаться активным: если display_errors
выключено, ошибки все равно не будут отображаться, но вы все равно можете записать их в файл.
Кстати, их можно установить в файле php.ini, конечно:
error_reporting
display_errors
На производственной машине вы можете использовать log_errors
а также error_log
, поэтому ошибки записываются в файл (это означает, что вы сможете узнать, какие ошибки произошли - иногда это может быть полезно); конечно, не забывайте время от времени проверять этот файл;-).
Как примечание: если у вас есть пара функций / методов, которые вы не хотите отображать ошибки, вы можете предусмотреть использование оператора @, чтобы просто маскировать ошибки, которые могут вызвать...
... Но я настоятельно советую против этого (за исключением очень специфических случаев): это усложняет отладку: ошибки, возникающие там, никогда не отображаются, даже на вашей машине для разработки!
На мой взгляд, лучше просто отключить display_errors
на производственной машине; это также означает, что ошибки не будут отображаться вообще, что лучше для пользователей!
На вашем рабочем сервере должны быть следующие настройки ini:
ini_set('error_reporting', E_ALL | E_STRICT);
ini_set('log_errors', true);
ini_set('error_log', '/tmp/php_errors.log'); // or whatever file is appropriate
ini_set('display_errors', false);
Выключая display_errors
Ваши пользователи никогда не увидят другое сообщение об ошибке, но вы сможете увидеть сообщения об ошибках, посмотрев в файл журнала.
Когда перекодирование закончено, больше не должно быть ошибок в файле журнала (потому что вы исправили их все).
Изменить: некоторые разработчики установили error_reporting
в E_ALL ^ E_NOTICE
как способ сокрытия ошибок. Это плохая практика, потому что она скрывает сообщения о возможных ошибках программирования. Вы должны использовать только E_ALL ^ E_NOTICE
когда из унаследованного кода приходит так много уведомлений, что вы не можете исправить их все.