Читайте также: |
|
Самый распространенный тип ошибок- синтаксические, когда вы забываете, так сказать, расставить все точки над «i». В результате на экране монитора соявляются сообщения, подобные тем, что представлены на рис. 14.1. Первым делом в РНР выявляются ошибки именно этого типа, так как перед выполнением кода обязательно проверяется его синтаксис. Чтобы избежать при программировании подобного рода ошибок, необходимо соблюдать следующие правила:
>• заканчивать каждую исполняемую строку кода точкой с запятой;
>- закрывать кавычки, а также круглые, квадратные и фигурные скобки;
>• экранировать с помощью обратного слеша все одинарные и двойные кавычки внутри функции print ().
Очень часто РНР и текстовый редактор по-разному интерпретируют строки. Так, в сообщении может содержаться информация о том, что обнаружена ошибка, например в строке 12, а это не соответствует действительности. Воспринимайте указываемое РНР место ошибки как отправную точку ее поиска.
Ошибки возникают также, если вы пытаетесь выполнить некоторое невозможное действие. Эти ошибки появляются, например, тогда, когда функции setcookie () или header () вызываются после того, как код HTML уже был отправлен в браузер, когда функция вызывается без соответствующих аргументов или когда вы пытаетесь записать данные в файл, не имея на это полномочий.
Достаточно распространены и логические ошибки - те, что допускает сам программист. Одна из причин подобных проблем - использование некорректного имени переменной. Если это происходит, вы получите не сообщение об ошибке, а странные или непредсказуемые результаты. Устранять логические ошибки труднее всего. Только тщательная проверка и четкий анализ ситуации помогут в таких случаях.
Предотвращение распространенных ошибок
1. Откройте файл HandleLogin.php в текстовом редакторе (листинг 14.1).
Листинг 14.1 Исходная страница HandleLogin.php выглядит неплохо, но она будет еще лучше, если использовать функцию headers_sent ().
1 <?php
2 if (($UserName == "Larry") && ($Password == "LarryPass")) {
3 header ("Location: index. php?UserName=$UserName");
4 exit;
5 } else {
6 header ("Location: login. php?Message=Invalid");
7 exit;
8 }
9?>
2. Создайте пустую строку до открывающего PHP-тэга. Она сгенерирует сообщение об ошибке.
3. После открывающего PHP-тэга добавьте условную конструкцию.
if (headers_sent ()) {
print ("Cannot process your request due to a system error!\n");
} else {
Функция headers_sent () возвращает истинное значение, если какой-либо фрагмент кода HTML или пустая строка уже были отправлены в браузер. Если бы это произошло, попытка использовать функцию header () инициировала бы отправку в браузер предупреждения пользователю. Вместо этого, если заголовок будет послан, на данной странице будет представлена типовая системная ошибка.
Если заголовок не отправлялся, функция headers_sent () возвратит ложное значение, и оставшийся код страницы будет выполнен.
4. Не забудьте закрыть условную конструкцию до закрывающего РНР-тэга!
5. Сохраните сценарий как HandleLogin.php (листинг 14.2), загрузите его на
сервер в один каталог с login. php и протестируйте обе страницы в браузере.
Листинг 14.2 т Функция headers_sent () помогает избежать распространенной ошибки отправки заголовка или cookie-файла после того, как на браузер уже пришла информация.
1 - - '
2 <?php
3 if (headers_sent ()) {
4 print ("Cannot process your request due to a system error! \n");
5 } else {
6 if (($UserName == "Larry") && ($Password == "LarryPass")) {
7 header ("Location: index. php?UserName=$UserName");
8 exit;
9. } else {
10 header ("Location: login.php?Mess'age=Invalid");
11 exit;
12 }
13 }
14?>
Лекция 15. Основные понятия ООП
Дата добавления: 2015-08-13; просмотров: 105 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Использование HTTP-заголовков | | | Классы и объекты |