Модераторы: IZ@TOP, skyboy, SamDark, MoLeX, Aliance, ksnk
  

Поиск:

Добавить материал
 

Об ошибках
Feldmarschall
Репутация: 22
Всего: 32

Профиль
Быстрая цитата Цитата
Теги:
Отвечая на вопросы в форуме, я заметил одну вещь.
Новички часто не понимают значения сообщения об ошибке. Просто не обращают внимания на его текст.
Подход у многих такой: "Есть код, он выдает ошибку. Что в коде исправить?". При этом даже не пишут - какая именно ошибка!
Текст ошибки просто игнорируется. Не делается даже попытки им как-то воспользоваться. Или, если сообщения на экране нет - то найти его и прочитать.
То есть, это принципиальный момент: сообщение об ошибке не рассматривается, как помощь при её исправлении. Вообще.
При том, что это самый главный инструмент исправления ошибки 
Именно эту мысль я и хочу донести до читателей: важно сообщение об ошибке читать, и пытаться понять, что в нем написано.
Пытаться исправить код не читая сообщение об ошибке - это каменный век! Это бессмысленная трата времени.
Именно поэтому опытный программист не будет пытаться угадывать - почему не работает его код, а сначала постарается увидеть сообщение об ошибке. 
Именно поэтому опытный программист не будет пытаться угадывать, какая именно проблема в коде, который запостили на форум - он попросит привести текст сообщения об ошибке.
Ведь в нем, в этом сообщении, все написано!

Разберем типичное сообщение об ошибке:
Цитата

Notice:  Undefined variable: var in D:\SERVER\test.php on line 3

Во-первых, в сообщении содержится очень важная информация - имя файла и номер строки в нем.
Это уже очень сильно может помочь - показать, куда смотреть в огромном коде на 500 строк.
Но главное - это текст:
Цитата

Undefined variable: var 

Да, надо знать английский язык. Без этого - никуда.
Но если знать, то все сразу станет ясно: переменная, к которой мы пытаемся обратиться, не существует. И дается её имя - $var
Осталось разобраться,  почему переменной нету, и исправить код так, чтобы она появилась и имела нужное значение.
Точно так же работаем со всеми другими ошибками - читаем текст и смотрим строку, в которой ошибка.

Кроме PHP об ошибках нам могут сообщать другие элементы системы - SQL Сервер, веб-сервер. Надо знать, как получить ошибки от них.

Поэтому несколько конкретных рекомендаций:
  • В сообщении об ошибке чаще всего написано - в чем проблема. Надо просто прочитать и исправить. 
  • Если непонятно, что в нем написано, то надо обязательно писать его на форуме, вместе со своим вопросом.  
  • При этом надо не переписывать от себя, а копировать, причем копировать целиком: "ненужные", на непосвященный взгляд, детали могут оказаться очень важными.
  • Если веб-сервер выдает ошибку 500 или пустую страницу, то текст сообщения об ошибке надо смотреть в логе ошибок веб-сервера. В windows, при дефолтной установке, он находится файле C:\Program Files\Apache Software Foundation\Apache2.2\logs\error.log. На хостинге расположение у лога ошибок может быть разное, но найти обычно нетрудно. Называется error_log или error.log
  • Если происходят проблемы с mysql, то надо вызывать функцию mysql_error() которая напишет, какие проблемы были в запросе.
  • Чтобы увидеть ошибки на экране, надо или php.ini выставить директиву display_errors = on, или создать файл .htaccess и поместить в него строчку php_flag display_errors 1
    Но на рабочем сервере так делать нельзя - ошибки не должны показываться пользователям. На рабочем сервере ошибки надо смотреть в логе. 
  • Самой первой строчкой скрипта написать error_reporting(E_ALL);
  • Если встретился случай, не описанный в этом списке, то все равно - пытаться найти и прочесть сообщение об ошибке.
P.S. Я в курсе, что из тех, кому он предназначается, этот текст не прочтет никто. Но наболело =)

Это сообщение отредактировал(а) Feldmarschall - 24.7.2008, 23:32


Комментарии посетителей:


Дата 13.7.2008, 12:45 (ссылка) |    (голосов:4) Загрузка ... Загрузка ... Быстрая цитата Цитата
skyboy ****   Репутация: 75  Всего: 260 
В "стандартном" сообщении об ошибке обычно сообщается только место(строка и имя файла), в котором происходит сбой.
Если ошибка не критическая(до E_WARNING) включительно, то можно установить собственный обработчик ошибок через set_error_handler, в котором при помощи debug_backtrace сделать вывод всего стека вызовов: кто, когда  и откуда первоначально сделал вызов, который, в конце концов, привел к ошибке.

PM MAIL   Вверх

Дата 20.7.2008, 10:16 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата
MuToGeN ****   Репутация: 7  Всего: 32 
1. Еще лучше не забывать о том, что для вас как для разработчика это просто сообщение об ошибке, но для кого-то другого оно может сказать "вот в этом скрипте есть такая-то уязвимость". Это особенно актуально для тех, у кого программирование на PHP не просто увлечение, а профессия. Т.е. вывод ошибок в браузер полезен только на этапе разработки, а когда проект запускается в "боевом" режиме, то это стоит отключать (я обычно использую перехват того, что можно перехватить, через set_error_handler() и set_exception_handler() с последующей отправкой на мой e-mail, и логирование всего, что перехватить нельзя - директивы конфига log_errors и log_file_name, error_log() итп). 
2. 
Цитата(Feldmarschall @  17.4.2008,  09:48 Найти цитируемый пост)
E_ALL

Точнее, E_ALL | E_STRICT. Во-первых это поможет понять, в чем именно стоит усовершенствовать свои знания (да, даже матерым профи порой приходится читать мануалы по концепциям ООП), во-вторых - как недавно было упомянуто на форуме, в PHP6 бит E_STRICT будет включен в E_ALL.
PM MAIL ICQ   Вверх

  
 
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0538 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.