Последний тип ошибок всевозможные нештатные ситуации. Они возникают,
когда какоелибо событие на сервере происходит не так, как обычно. К счас
тью, нештатные ситуации более редки, чем ошибки программирования. На
пример, если база данных 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, а затем пытается выбрать базу данных.
Выполнение действия
- Создайте новый PHPдокумент в текстовом редакторе.
- Начните со стандартного HTMLдокумента.
- Откройте PHPраздел и задайте переменные для доступа в базу данных.
- Отключите отчеты об ошибках.
- Подсоединитесь к базе MySQL.
- Выберите базу данных.
- Отключите связь с MySQL и закройте РНРраздел.
- Создайте простое сообщение и закройте HTMLстраницу.
- Сохраните сценарий как die.php (листинг 14.6), загрузите его на сервер
и протестируйте в браузере (рис. 14.1114.13).
Листинг 14.6 т Для сценариев, состоящих из нескольких строк кода, каждая
из.которых зависит от успешного исполнения предыдущей строки, инструкция
die бесценна для прекращения дальнейшего распространения ошибок и их бы
строго обнаружения. В связи с тем что инструкция die обрабатывает ошибки,
встроенная в РНР обработка ошибок была выключена (сравните рис. 14.11
и 14.13).
<HTML>
<HEAD>
<TITLE>Die!</TITLE></HEAD>
<BODY>
<?php
// Установка значений переменных для доступа к базе данных.
$Host = "localhost";
$User = "username";
$Password = "password";
$DBName = "database";
error_reporting(0);
Так как все ошибки будут обслуживаться инструкцией die, мы отключаем
заданный по умолчанию метод информирования об ошибках во избежание
избыточности.
$Link = mysql_connect ($Host, $User, $Password) or die("Couldn't
connect to the database!");
Эта строка кода «говорит» РНР попытаться установить связь с MySQL.
Если по какойлибо причине сделать этого не удается, вы увидите сообщение
«Couldn’t connect to database», а исполнение сценария приостановится. Очень
важно сразу же остановить исполнение сценария: если не удастся подсоеди
ниться к базе данных, следующие две строки кода, зависящие именно от этой
"операции, также вызовут сообщения об ошибках. (В действительности сообще
ние об ошибке не появится, так как мы отключили функцию error_reporting,
но программа работать не будет).
mysql_select_db ($DBName, $Link) or die (mysql_error (•) ) ;
Если выбрать базу данных, определенную в аргументе $DBName, не удалось,
то сценарий прекратит исполнение и будет распечатано сообщение об ошиб
ке, сгенерированное MySQL.
mysql_close ($Link);
?>
Testing the die statement!
</BODY>
</HTML>
Я добавил эту текстовую строку, чтобы страница имела какоелибо содержа
ние. Страницу легко модифицировать, чтобы она отправляла в базу данных
и запросы.
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."));