Поиск

Использование инструкции die

Последний тип ошибок всевозможные нештатные ситуации. Они возникают, когда какоелибо событие на сервере происходит не так, как обычно. К счас тью, нештатные ситуации более редки, чем ошибки программирования. На пример, если база данных MySQL не работает, то все связанные с ней функции генерируют ошибки. Или; как мы видели в примере со страницей email.php, если серверное приложение электронной почты не функционирует (на серве ре UNIX), это тоже создаст проблему. Хотя системные ошибки не зависят от программиста, их необходимо иметь в виду при написании кода.

Дальнейшее распространение ошибок можно остановить с помощью ин струкции die. Эта инструкция заставляет РНР прекратить исполнение сцена рия, как только происходит первая ошибка и дальнейшая работа невозможна. Она также может отправить в браузер сообщение об ошибке или вызвать функ цию. Например,

$Link=mysql_connect($Host,$User,$Password) or die
—("Couldn't connect to database.");

Если по какойлибо причине не удается установить связь с базой данных, сценарий прекратит свое исполнение и напечатает сообщение «Couldn't connect to database».

$Link=mysql_connect($Host,$User,$Password) or die (mysql_error()};

В этом примере, если код РНР не может установить связь с базой данных, инструкция die вызовет функцию mysql_error ( ) . Эта функция напечатает реальную ошибку, сгенерированную базой данных MySQL.

Оба примера работают: если код РНР определит, что первая часть условной конструкции or (значение, возвращаемое функцией mysgl_connect) имеет лож ное значение, то будет инициирована вторая часть условной конструкции (ин струкция die) с целью узнать значение всего логического оператора. Другими словами, строка «говорит»: если установить связь с сервером БД невозможно, делай это. Если связь с базой устанавливается, значит, это то, что требовалось, и вторая часть логического оператора or не проверяется и не выполняется. Добавим инструкцию die в базовый сценарий, который устанавливает связь с MySQL, а затем пытается выбрать базу данных.

Выполнение действия

  1. Создайте новый PHPдокумент в текстовом редакторе.
  2. Начните со стандартного HTMLдокумента.
  3. <HTML>
    <HEAD>
    <TITLE>Die!</TITLE></HEAD>
    <BODY>
  4. Откройте PHPраздел и задайте переменные для доступа в базу данных.
  5. <?php
    // Установка значений переменных для доступа к базе данных.
    $Host = "localhost";
    $User = "username";
    $Password = "password";
    $DBName = "database";
  6. Отключите отчеты об ошибках.
  7. error_reporting(0);

    Так как все ошибки будут обслуживаться инструкцией die, мы отключаем заданный по умолчанию метод информирования об ошибках во избежание избыточности.

  8. Подсоединитесь к базе MySQL.
  9. $Link = mysql_connect ($Host, $User, $Password) or die("Couldn't
    connect to the database!");

    Эта строка кода «говорит» РНР попытаться установить связь с MySQL. Если по какойлибо причине сделать этого не удается, вы увидите сообщение «Couldn't connect to database», а исполнение сценария приостановится. Очень важно сразу же остановить исполнение сценария: если не удастся подсоеди ниться к базе данных, следующие две строки кода, зависящие именно от этой "операции, также вызовут сообщения об ошибках. (В действительности сообще ние об ошибке не появится, так как мы отключили функцию error_reporting, но программа работать не будет).

  10. Выберите базу данных.
  11. mysql_select_db ($DBName, $Link) or die (mysql_error (•) ) ;

    Если выбрать базу данных, определенную в аргументе $DBName, не удалось, то сценарий прекратит исполнение и будет распечатано сообщение об ошиб ке, сгенерированное MySQL.

  12. Отключите связь с MySQL и закройте РНРраздел.
  13. mysql_close ($Link);
    ?>
  14. Создайте простое сообщение и закройте HTMLстраницу.
  15. Testing the die statement!
    </BODY>
    </HTML>

    Я добавил эту текстовую строку, чтобы страница имела какоелибо содержа ние. Страницу легко модифицировать, чтобы она отправляла в базу данных и запросы.

  16. Сохраните сценарий как die.php (листинг 14.6), загрузите его на сервер и протестируйте в браузере (рис. 14.1114.13).
    Листинг 14.6 т Для сценариев, состоящих из нескольких строк кода, каждая из.которых зависит от успешного исполнения предыдущей строки, инструкция die бесценна для прекращения дальнейшего распространения ошибок и их бы строго обнаружения. В связи с тем что инструкция die обрабатывает ошибки, встроенная в РНР обработка ошибок была выключена (сравните рис. 14.11 и 14.13).
  17. 1 <HTML>
    2 <HEAD>
    3 <TITLE>Die!</TITLEx/HEAD>
    4 <BODY>
    5 <?php
    6 // Установка переменных для доступа к базе данных.
    7 $Host = "localhost";
    8 $User = "username";
    9 $Password = "password";
    10 $DBName = "database";
    11 error_reporting(0);
    12 $Link = mysgl_eonnect ($Host, $User, $Password) or die("Couldn't
    connect to thedatabase!");
    13 mysql_select_db ($DBName, $Link) or die(myeql_error());
    14 mysql_close ($Link);
    15 ?>
    16 Testing the die statement!
    17 </BODY>
    18 </HTML>

    Вы можете предотвратить создание сообщений об ошибках с помощью разме щения символа коммерческое «а» перед вызовом любой функции. Символ @ на зывают оператором управления ошибками, он подавляет любые сообщения об ошибках, вызванные функцией, перед которой стоит. Символ используется сле дующим образом:

$Link=@mysql_connect ($Host, $User, $Password);
Обратите внимание на отсутствие пробела между знаком @ и именем функции, а также на то, что подавление сообщений не меняет результат, выдаваемый функ цией. В отличие от инструкции die символ @ не дает вам возможности распеча тать сообщение об ошибке или вызвать функцию.
Инструкцию die можно использовать и для вызова ваших собственных функций. Например, если вы создали функцию для печати сообщений об ошибках в опре деленном формате, можно воспользоваться данной инструкцией:
$Link =@mysql_connect ($Host, $User, $Password) or —die(print_message("Couldn't connect."));