Анонсы:
|
PHP. Урок 22 Обработка ошибокУрок 22. Обработка ошибокВ этом уроке вы узнаете, как эффективно обрабатывать ошибки в сценариях PHP и отлаживать сценарии, которые не работают так, как ожидалось. Система уведомления об ошибкахСистема уведомления об ошибках просто настраивается в PHP и позволяет легко установить требуемый уровень строгости. По-умолчанию, строгий режим отключен. Поэтому сообщения об ошибках появляются только в случае потенциальной опасности неправильной работы сценария. Изменения уровня ошибокФункция error_reporting позволяет изменить уровень уведомления об ошибках. На вход нужно подать одну из констант в табл. 22.1.
Эти константы можно объединить с помощью поразрядных операторов и создать необходимый набор битов, который установит нужный уровень уведомления. По умолчанию устанавливается уровень E_ALL & E_NOTICE, который показывает все ошибки и предупреждения, кроме E_STRICT. Последний не перекрывается в E_ALL и E_NOTICE. Чтобы установить уровень уведомления, который показывает все предупреждения и замечания, нужно выполнить следующую команду: Предупреждения которые не показываются по умолчанию, не являются критическими и не мешают нормальному выполнению сценария. Уровень ошибок E_NOTICE может помочь при разработке сценария. Он предупреждает обо всех необъявленных переменных. Кроме того, E_NOTICE не приводит к ошибкам в сценарии. Эти сообщения могут указывать на то, что в названии переменной найдена опечатка и нужно посмотреть ранее набранный код. Флаг E_NOTICE позволяет проконтролировать стиль кодирования. Например, ключ ассоциативного массива нужно заключать в кавычки. Но небрежный программист может написать $array[kay]. Нужно помнить, что key в PHP является константой. Если она не определена в сценарии, PHP пытается найти переменную с соответствующим текстовым ключом. Но при включенном E_NOTICE появится сообщение об этой двузначности. Уровень E_STRICT появился в PHP5 и очень помогает писать актуальный код. Он уведомляет об использовании упраздненных функций, которые поддерживаются только для обратной совместимости. Изменить уровень уведомления можно также в файле php.ini или с помощью .htaccess в нужном каталоге с помощью инструкции error_reporting. Показ ошибок. Настройки log_errors и display_errors определяют место вывода сообщений об ошибках. Это может быть экран или файл журнала. Специальный обработчик ошибокPHP позволяет задать специальную функцию, которая вызывается при обнаружении ошибки. Это позволяет заменить стандартное действие вывода на экран или записи в файл журнала. Функция set_error_handle задает функцию, которая будет специальным обработчиком ошибок. Ей нужно передать два аргумента. Первый, обязательный — имя функции и второй — необязательный, в котором содержится набор битов, задающий необходимый уровень ошибок. Он и будет о брабатываться этой функцией. Например, для того, чтобы функция myhandler отслеживала все ошибки E_WARNING и E_NOTICE, используется следующая команда: Определенный пользователем обработчик ошибок требует два параметра: код ошибки и строку с сообщением об ошибке. Значение кода для ошибки можно взять из табл. 22.1, чтобы знать, какая ошибка произошла. Также можно добавить три необязательных параметра, которые помогут найти ошибку: название файла, номер строки и контекст, в котором произошла ошибка. В листинге 22.1 задается специальный обработчик ошибок, который записывает все ошибки в таблицу базы данных MySQL. Листинг 22.1. Специальный обработчик ошибок
Таблицу для сбора ошибок можно создать с помощью следующего SQL-выражения: Нужно помнить, что в этом примере не используется пятый необязательный параметр для контекста. Контекст передается в виде массива. В нем содержится значение каждой переменной, включая локальные и системные суперглобальные, которые определены в сценарии на момент, когда случилась ошибка. Эта информация может пригодиться при отладке, но ее слишком много, чтобы хранить в файле журнала или таблице. Кроме того, так как значение передается в виде массива, $errcontext нужно сначала передать в функцию serialize, чтобы сохранить в таблице или текстовом файле. Данные контекста. Обычно нужна только небольшая часть данных контекста, которые передаются функции-обработчику. Поэтому функция может извлечь нужную часть, а остальное отбросить. Генерирование ошибкиМожно воспользоваться функцией trigger_error, чтобы при необходимости сгенерировать ошибку. Если задан специальный обработчик ошибок, он и будет обрабатывать пользовательскую ошибку. Иначе ее обработкой займется стандартный обработчик ошибок PHP. Нужно передать строку с ошибкой в trigger_error. Также можно добавить необязательную константу типа ошибки. Если ее не задать, будет использована E_USER_NOTICE. Например, для генерирования пользовательского замечания можно воспользоваться следующим кодом: На экране появится ошибка похожая на эту: Чтобы сгенерировать критическую ошибку с аналогичным текстом, используется следующие выражение: Типы ошибок. Для пользовательских ошибок нужно использовать E_USER_ERROR и E_USER_WARNING, а не E_ERROR и E_WARNING. Тип E_USER_ERROR тоже трактуется как критическая ошибка и завершает выполнения сценария сразу после обнаружения. Сохранение ошибокС помощью функции error_log можно удовлетворить все простые потребности по хранению ошибок. Эта функция позволяет записывать ошибки в файл журнала Web-сервера или любой другой, отправлять их по электронной почте или пересылать на удаленный сервер отладки. Функции error_log передаются следующие аргументы: Только аргумент message является обязательным. Стандартным действием является запись сообщения в файл журнала PHP. В большинстве случаев это будет файл журнала Web-сервера. Аргумент message_type задает тип отправки сообщения. Возможные значения перечислены в табл. 22.2. Таблица 22.2. Значения message_type для error_log
Например, для отправки сообщения об ошибке по электронной почте используется следующие выражение: Подавление ошибок и предупрежденийPHP позволяет подавлять сообщения об ошибках в сценарии. Можно полностью отключить показ ошибок или выбрать отдельные команды, для которых не будут показываться ошибки. Оператор подавления ошибкиДля того чтобы подавить вывод ошибки в отдельном операторе, используется символ @. При этом можно выводить специальное сообщение об ошибке. Например, если при соединении с базой данных MySQL произошел сбой, PHP генерирует собственную ошибку. Но может быть также и альтернативная проверка соединения. Например, проверка идентификатора соединения с базой данных. В следующим примере используется символ @, который блокирует вывод ошибок PHP. Таким образом, в случае ошибки появится только специальное сообщение: Можно поместить символ @ перед любым выражением в PHP. Он подавляет все сообщения об ошибках, которые произошли во время выполнения выражения. В этом примере подавляется выражение, которое выполняет соединение с базой данных. Общее правило таково: если что-то в PHP может иметь значение, перед ним следует поставить символ @. Нельзя размещать символ @ перед управляющими конструкциями языка. Например, перед определением функции или условным выражением. Анализ ошибок. Оператор @ не скрывает ошибок, которые обнаружены на стадии анализа кода сценария. Следующие выражение — правильное. Но кажется, что сообщение об ошибке относится к mysql_connect: Подавление ошибок. Если в сценарии используется set_error_handler для установки специального обработчика ошибок, оператор @ не оказывает никакого эффекта. Предотвращение показа ошибокЕсли директиве настройки display_errors из файла php.ini установить значение Off, это предотвращает вывод всех сообщений об ошибках на экран. При отключении вывода ошибок на экран, нужно активизировать директиву log_errors. Все шибки будут сохраняться в файл журнала. Иначе будет невозможно узнать о потенциальных угрозах на сайте. Не нужно выключать display_errors на стадии разработки Web-сайта. РезюмеВ этом уроке вы узнали, как обнаружить и обработать ошибку в сценарии PHP. В следующем уроке вы научитесь настраивать PHP для конкретных потребностей. |
Погода в Рудне на 13 Окт 2024 г. 704 - Вьетнамских донгов - 1 |