28.5. Стратегии отладки
Бывают случаи, когда кодирование приводит к самым неожиданным результатам, а изучение кода не дает никаких результатов. В таком случае лучше всего произвести построчную отладку. Сценарии PHP генерируют HTML-код, который интерпретируется браузером, и HTML-код снабжается тегом комментария. Поэтому проще всего написать PHP-код, который бы сообщал диагностическую информацию в HTML-комментариях. Это позволит поместить диагностическую информацию в сценарии, не виляя на его работу.
Часто приходится создавать динамические запросы к базе данных на основании данных, вводимых пользователями. Неправильный символ или ошибочный пользовательский ввод может привести к ошибке. Иногда следует оставлять возможность для ввода самого запроса. Кроме того, можно выводить результаты работы функций, формирующих сообщения об ошибках (mysql_error). Тоже справедливо и для кода, не имеющего отношение к работе с базами данных. Распечатка даже таких простых диагностических сообщений, как "попали туда-то", может помочь. (В главе 9, "Операционная система", описывалось множество функций, имеющих отношение к процессу отладки, особое место среди которых занимает функция print_r.)
Можно долго искать ошибки в созданном приложении, включив отображение всех ошибок, сообщений и уведомлений. Сообщения и уведомления не могут остановить ваши сценарии, но они могут предупредить о потенциальных проблемах. Посмотрим, как PHP позволяет использовать переменную для ее инициализации. Если в имени переменной содержится ошибка, PHP создает новую переменную с пустым значением. PHP генерирует уведомление об использовании значения переменной до ее инициализации. Проще всего активизировать уведомления в конфигурационном файле php.ini , предполагая, что Web-сервер полностью предназначен для поддержания работ по разработке приложений. Промышленно используемый Web-сервер не должен отображать сообщения об ошибках. Но полное диагностирование ошибок можно включить с помощью функции error_reporting.
Есть еще один способ - фиксирование диагностических сообщений в специальном системном журнале. Функции error_log и syslog представляют собой два решения, встроенных в PHP. Конечно, несложно открыть текстовый файл и записывать в него диагностическую информацию. При использовании Web-сервера Apache для передачи отладочной информации процессу Apache и включения ее в регистрационный журнал можно воспользоваться функцией apache_note. О том, как создаются специальные регистрационные журналы, можно узнать в документации по Web-серверу Apache.
Наконец, есть еще несколько инструментов, предназначенных для отладки сценариев PHP. Например, Zend Studio имеет удаленный отладчик, позволяющий прослеживать работу каждой строки сценария.
28.6. Имитация HTTP-соединений
При написании сценариев PHP необходимо понимать каждую деталь HTTP-протокола. Я не хочу углубляться в эту тему и лишь отмечу, что умение сымитировать HTTP-соединение с помощью утилиты telnet может пригодиться в дальнейшем. Вы, конечно, знаете, что Web-сервер по умолчанию использует порт 80. HTTP-протокол - это текстовый протокол, поэтому можно подключиться с помощью утилиты telnet непосредственно к Web-серверу и выполнить простой запрос. HTTP-протокол имеет несколько общеизвестных команд, но чаще всего используются команды GET и POST. Команда HEAD возвращает только заголовок запроса, и браузеры с ее помощью могут определить, требуется ли в действительности целый документ.
Имитация HTTP-соединений может очень помочь при отправке сценарием адаптируемых заголовков. На рис. 28.3 показан запрос, сделанный к Web-серверу Apache. Жирным шрифтом выделена вводимая команда, все остальное - это информация, которую возвратил сервер.
ТОП-10 популярных
Для работы с вещественными числами в MySQL предусмотрено три типа данных - это типы FLOAT, DOUBLE, DECIMAL. Числовой тип FLOAT...
БОЛЬШЕ БОЛЬШИХ LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Больше больших LCD-мониторов
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
Процесс вытеснения с рынка мониторов с электронно-лучевой трубкой (CRT) продолжается. О смещении акцентов в пользу LCD-мониторов теперь заявляют даже те...
НОУТБУК с блестящим экраном
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Eсли выпустившая ноутбук фирма предлагает его в качестве «замены настольному ПК», то это должно подразумевать под собой нечто большее, чем...
Иди и пиши. TravelMate C100
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Планшетный компьютер платформы Tablet PC обязан в первую очередь быть легким, способным достаточно долго работать без подзарядки батарей. Эти требования...
Магнито-оптический дисковод DynaMO
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Cейчас, когда традиционные флоппи-дисководы на долгие годы замерли в своем развитии, поиск альтернативных носителей продолжается, и ситуация, казалось бы, разрешилась...
Компьютер для гурманов.«Эксимер ДМ»
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Российская компания «Эксимер ДМ», известная как производитель настольных компьютеров, рабочих станций, серверов и ноутбуков, выступила техническим спонсором проведения торжеств, посвященных...
Для длинных строк, т.е. строк длиннее 255 символов, в MySQL предусмотрены типы BLOB (Binary Large Object, большой двоичный объект) и...
В дополнение к календарным типам, предназначенным для хранения даты и времени отдельно, MySQL также поддерживает гибридные типы данных DATETIME и...
Вообще, к изменению настроек сервера прибегают очень редко. В MySQL программа заранее настроена так, чтобы соответствовать самым распространенным и основным...
PHP. Эффективность и отладка. Часть Шестая.
10-07-2015
<< Предыдущая статья | Следующая статья >> |
PHP. Эффективность и отладка. Часть Пятая. | PHP. Эффективность и отладка. Часть Седьмая. |