Поиск

Распространенные ошибки

Самый распространенный тип ошибок синтаксические, когда вы забываете, так сказать, расставить все точки над «i». В результате на экране монитора со являются сообщения, подобные тем, что представлены на рис. 14.1. Первым делом в РНР выявляются ошибки именно этого типа, так как перед выполне нием кода обязательно проверяется его синтаксис. Чтобы избежать при про граммировании подобного рода ошибок, необходимо соблюдать следующие правила:

  • заканчивать каждую исполняемую строку кода точкой с запятой;
  • закрывать кавычки, а также круглые, квадратные и фигурные скобки;
  • экранировать с помощью обратного слеша все одинарные и двойные ка вычки внутри функции print ( ) .

Очень часто РНР и текстовый редактор поразному интерпретируют стро ки. Так, в сообщении может содержаться информация о том, что обнаружена ошибка, например в строке 12, а это не соответствует действительности. Вос принимайте указываемое РНР место ошибки как отправную точку ее поиска. Ошибки возникают также, если вы пытаетесь выполнить некоторое невоз можное действие. Эти ошибки появляются, например, тогда, когда функции setcookie ( ) или header ( ) вызываются после того, как код HTML уже был от правлен в браузер, когда функция вызывается без соответствующих аргументов или когда вы пытаетесь записать данные в файл, не имея на это полномочий. Также ошибки выявляются при попытке исполнить код (рис. 14.2).

Достаточно распространены и логические ошибки те, что допускает сам программист. Одна из причин подобных проблем использование некоррект ного имени переменной. Если это происходит, вы получите не сообщение об ошибке (рис. 14.1 и 14.2), а странные или непредсказуемые результаты. Устра нять логические ошибки труднее всего. Только тщательная проверка и четкий анализ ситуации помогут в таких случаях.

Чтобы избежать отправки заголовка после того, как браузер уже получил HTMLкод или пустую строку, добавим проверку в сценарий HandleLogin.php (речь о нем шла в главе 13).

Предотвращение распространенных ошибок

  1. Откройте файл HandleLogin.php в текстовом редакторе (листинг 14.1). Листинг 14.1 т Исходная страница HandleLogin.php выглядит неплохо, но она будет еще лучше, если использовать функцию headers_sent ( ) .
  2. 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 ?>
  3. Создайте пустую строку до открывающего PHPтэга. Она сгенерирует сообщение об ошибке (рис. 14.3).
  4. После открывающего PHPтэга добавьте условную конструкцию.
  5. if ( headers_sent ( ) ) {
    print ("Cannot process your request due to a system error ! \ n " ) ;
    } else {

    Функция headers_sent ( ) возвращает истинное значение, если какойлибо фрагмент кода HTML или пустая строка уже были отправлены в браузер. Если бы это произошло, попытка использовать функцию header ( ) инициировала бы отправку в браузер предупреждения пользователю. Вместо этого, если заголо вок будет послан, на данной странице будет представлена типовая системная ошибка.

    Если заголовок не отправлялся, функция headers_sent ( ) возвратит ложное значение, и оставшийся код страницы будет выполнен.

  6. Не забудьте закрыть условную конструкцию до закрывающего РНРтэга!
  7. Сохраните сценарий как HandleLogin.php (листинг 14.2), загрузите его на сервер в один каталог с login. php и протестируйте обе страницы в браузе ре (рис. 14.4).
  8. Листинг 14.2 т Функция headers_sent ( ) помогает избежать распространен ной ошибки отправки заголовка или cookieфайла после того, как на браузер уже пришла информация (рис. 14.3).

    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 ?>

    Некоторые текстовые редакторы имеют утилиты, контролирующие количество от крывающих и закрывающих скобок и кавычек.