Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #64, АПРЕЛЬ 2004 г.

Смой кровью свои ошибки!

Никита "red_way" Кислицин

Xakep, номер #064, стр. 064-118-1


(nikitoz@real.xakep.ru, www.ired.ru)

Обработка ошибок в PHP-сценариях

Ошибки в работе программиста неизбежны. Они могут быть прогнозируемыми, а могут и неожиданными, могут быть решаемыми, а могут преследовать разработанную систему очень долго, всплывая в самые ответственные моменты. Именно поэтому искусство программирования включает в себя не только умение вовремя их обнаруживать и устранять, но и предвидеть. О методах обнаружения и борьбы с ошибками в web-системах, реализованных на PHP, и пойдет речь ниже.

Все ошибки в программировании можно разделить на четыре большие категории:

* Синтаксические ошибки. Их причиной служит неверный синтаксис программы, который не позволяет транслятору верно интерпретировать написанный код.

* Семантические ошибки. Они возникают в процессе выполнения программой семантически верного кода.

* Логические ошибки - самые неприятные и сложные в отладке. Сообщение об ошибке не выводится, однако программа делает не то, что хотел программист. Порой отладка таких ошибок занимает огромное количество времени, порождает море новых проблем и заставляет программиста понервничать.

* Ошибки окружения. Возникают не по вине программиста, а в результате влияния внешних факторов, которые программист не способен изменить.

Если ты хоть раз в жизни самостоятельно писал и отлаживал какую-то программу, кроме "Hello World", тебе хорошо знакомы все эти типы ошибок. Само собой, я не буду подробно рассказывать, что представляет собой каждая из них, а ограничусь той краткой характеристикой, которую привел. Интересно другое - как интерпретатор PHP действует при обнаружении ошибки, и каким образом можно контролировать его действия. Ведь, согласись, если ты разработал заказчику систему за $1500, а во время презентации случайно выползет сообщение типа "Warning! 0 is not a MySQL result index in ...", это будет полный ахтунг :). Именно поэтому в коммерческих системах очень важно контролировать все сообщения об ошибках и перехватывать их, заменяя дружелюбными сообщениями, которые сгладят вину перед заказчиком :). Кроме того, сообщения об ошибках могут предоставить бесценную информацию взломщику твоей системы - а это едва ли в твоих интересах.

Сообщения об ошибках в PHP очень информативны - ведь они предназначаются программисту, позволяют ему эффективнее устранить неполадку. Внимательный человек заметит, что все сообщения об ошибках строятся по одному шаблону: Уровень ошибки: сообщение, имя файла, строка.

Уровни ошибок

В зависимости от тяжести ошибок, PHP разделяет их на 2 уровня: "parse error" - синтаксические, "fatal error" - неисправимые ошибки, завершающие выполнение сценария. Кроме того, есть "warnings" - предупреждения и "notices" - "замечания". При возникновении таких проблем, возможно дальнейшее выполнение программы, однако программисту следует обращать на них внимание. Разумеется, PHP предоставляет средства для регулирования того, информацию о каких ошибках следует выводить браузеру. Это зависит от параметра error_reporting, значение по умолчанию которого задается в конфигурационных файлах, а для каждого отдельного сценария его можно определять при помощи одноименной процедуры, единственный параметр которой - целое число - получается следующим образом. Каждому типу ошибок соответствует некоторые значение. Так, 1 соответствует неисправимым ошибкам, 2 - предупреждениям, 4 - синтаксическим ошибкам, а 8 - уведомлениям. Суммируя коды типов ошибок, информацию о которых следует выводить, получаем параметр этой процедуры. Так, например, чтобы вообще не выводить никаких сообщений, следует написать error_reporting(0), а чтобы показывать неисправимые ошибки и предупреждения, параметр функции следует установить равным 3 (1+2).

Содержание  Вперед на стр. 064-118-2
Магазин сувениров киев подарки на www. www.podarik.kiev.ua завод игрушек.
<<< НАЗАД ||| ГЛАВНАЯ