Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > PHP: Общие вопросы > Об ошибках |
Автор: Feldmarschall 17.4.2008, 09:48 | ||||
Отвечая на вопросы в форуме, я заметил одну вещь. Новички часто не понимают значения сообщения об ошибке. Просто не обращают внимания на его текст. Подход у многих такой: "Есть код, он выдает ошибку. Что в коде исправить?". При этом даже не пишут - какая именно ошибка! Текст ошибки просто игнорируется. Не делается даже попытки им как-то воспользоваться. Или, если сообщения на экране нет - то найти его и прочитать. То есть, это принципиальный момент: сообщение об ошибке не рассматривается, как помощь при её исправлении. Вообще. При том, что это самый главный инструмент исправления ошибки . Именно эту мысль я и хочу донести до читателей: важно сообщение об ошибке читать, и пытаться понять, что в нем написано. Пытаться исправить код не читая сообщение об ошибке - это каменный век! Это бессмысленная трата времени. Именно поэтому опытный программист не будет пытаться угадывать - почему не работает его код, а сначала постарается увидеть сообщение об ошибке. Именно поэтому опытный программист не будет пытаться угадывать, какая именно проблема в коде, который запостили на форум - он попросит привести текст сообщения об ошибке. Ведь в нем, в этом сообщении, все написано! Разберем типичное сообщение об ошибке:
Во-первых, в сообщении содержится очень важная информация - имя файла и номер строки в нем. Это уже очень сильно может помочь - показать, куда смотреть в огромном коде на 500 строк. Но главное - это текст:
Да, надо знать английский язык. Без этого - никуда. Но если знать, то все сразу станет ясно: переменная, к которой мы пытаемся обратиться, не существует. И дается её имя - $var Осталось разобраться, почему переменной нету, и исправить код так, чтобы она появилась и имела нужное значение. Точно так же работаем со всеми другими ошибками - читаем текст и смотрим строку, в которой ошибка. Кроме PHP об ошибках нам могут сообщать другие элементы системы - SQL Сервер, веб-сервер. Надо знать, как получить ошибки от них. Поэтому несколько конкретных рекомендаций:
|
Автор: skyboy 13.7.2008, 12:45 |
В "стандартном" сообщении об ошибке обычно сообщается только место(строка и имя файла), в котором происходит сбой. Если ошибка не критическая(до E_WARNING) включительно, то можно установить собственный обработчик ошибок через http://php.net/set_error_handler, в котором при помощи http://php.net/debug_backtrace сделать вывод всего стека вызовов: кто, когда и откуда первоначально сделал вызов, который, в конце концов, привел к ошибке. |
Автор: MuToGeN 20.7.2008, 10:16 |
1. Еще лучше не забывать о том, что для вас как для разработчика это просто сообщение об ошибке, но для кого-то другого оно может сказать "вот в этом скрипте есть такая-то уязвимость". Это особенно актуально для тех, у кого программирование на PHP не просто увлечение, а профессия. Т.е. вывод ошибок в браузер полезен только на этапе разработки, а когда проект запускается в "боевом" режиме, то это стоит отключать (я обычно использую перехват того, что можно перехватить, через set_error_handler() и set_exception_handler() с последующей отправкой на мой e-mail, и логирование всего, что перехватить нельзя - директивы конфига log_errors и log_file_name, error_log() итп). 2. Точнее, E_ALL | E_STRICT. Во-первых это поможет понять, в чем именно стоит усовершенствовать свои знания (да, даже матерым профи порой приходится читать мануалы по концепциям ООП), во-вторых - как недавно было упомянуто на форуме, в PHP6 бит E_STRICT будет включен в E_ALL. |