Поиск
Сообщения о возможных ошибках и их протоколирование
В языке РНР есть хорошая встроенная поддержка для генерации сообщений об ошибках и их обработки. Вы сможете многому научиться с помощью этих средств.
Функция error_reporting ( ) указывает, о каких типах ошибок РНР должен информировать. Строка error_reporting ( 0 ) полностью отключает составле ние сообщений об ошибках. Ошибки все равно будут, просто вы о них больше не узнаете. И наоборот, строка error_reporting(E_ALL) будет выдавать сооб щения обо всех произошедших ошибках. (В руководстве по РНР, а также в таб лице С.6 (приложение С) представлена информация об уровнях, которые мож но задать в отношении сообщений об ошибках.)
Функция error_reporting ( ) «говорит» о том, какие ошибки должны сопро вождаться сообщениями, а функция error_log () «инструктирует» РНР, как протоколировать ошибки:
error_log()("message", "type", "destination"};
При возникновении проблемы ошибка может быть автоматически записа на в файл протокола, либо же вы получите соответствующее сообщение по электронной почте. Разумное использование функции error_log() позволяет Webмастерам и программистам постоянно знать, что происходит на их Web сайтах. Чтобы в случае ошибки вы получали информацию по электронной по чте, добавьте в ваш код следующую строку:
error_log()("message", "1", "php@DMCinsights.com");
Изменим сценарий email.php (глава 13) так, чтобы, если не удалось отпра вить информацию по электронной почте, осуществлялась запись в файл.
Использование функции error_log()
- Откройте файл email.php в текстовом редакторе (листинг 14.3). Листинг 14.3 т Это сценарий email.php, взятый из главы 13. В настоящее время он не имеет функции протоколирования ошибок, которая сделала бы его более полезным.
- После строки 9 добавьте запись, данную ниже.
- Сохраните сценарий как email.php (листинг 14.4) и загрузите его на Web сервер.
- Создайте пустой документ в текстовом редакторе.
- Сохраните документ как errors.txt и загрузите его на сервер в один ката лог с email.php.
- Задайте такие права доступа к файлу errors.txt, чтобы все категории пользо вателей могли записывать данные в этот файл.
- Протестируйте email.php в браузере (рис. 14.514.7).
1 <?php
2 $PageTitle = "Sending Emails";
3 require ("header.php");
4 if ($BeenSubmitted) {
5 if ($MailTo) {
6 if (mail ($Ma'ilTo, $Subject, $Body, "From: SMailFrom")) {
7 print ("<BxCENTERxFONT COLOR=BLUE>Your email has been
successfully sent!</FONTx/CENTERx/B>\n") ;
8 } else {
9 print ("<BxCENTERxFONT COLOR=RED>Your email was not
successfully sent due to a system error!</FONTx/CENTER>
10 } ' ' '
11 } else {
12 print ("<BxCENTERxFONT COLOR=RED>Please enter the recipient's
mail to address!</FONTx/CENTERx/B>\n") ;
13 }
14 }
15 ?>
16 <FORM ACTION="email.php" METHOD=POST>
17 Recipient's Email Address: <INPUT TYPE=TEXT NAME="MailTo"
SIZE="50"xBR>
18 Your Email Address: <INPUT TYPE=TEXT NAME="MailFrom" SIZE="50"xBR>
19 Email Subject: <INPUT TYPE=TEXT NAME="Subject" SIZE="80"xBR>
20 Email Body:<TEXTAREA NAME="Body" ROWS="10" COLS="50">
21 </TEXTAREAxP>
22 <INPUT TYPE=HIDDEN NAME=BeenSubmitted VALUE=TRUE>
23 <INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
24 </FORM>
25 <?php
26 require ("footer.php");
27 ?>
error_log ("Unable to send an email to $MailTo from
$MailFrom at " . timed. "\n", 3, "errors.txt");
Каждый раз, когда функция mail (} не может быть выполнена, в файл жур нала записывается простое сообщение. Оно указывает, что $MailFrom не мо жет послать сообщение $MailTo в определенное время (заданное с помощью функции t ime ()). Опытный администратор может просмотреть этот файл и либо отследить пользователей, у которых возникли проблемы, либо опреде лить, когда функция mail ( ) перестала работать корректно.
Создадим пустой документ errors.txt, который будет исполнять роль прото кола ошибок.
Листинг 14.4 т В модифицированной версии сценария email.php функция error_log() используется для протоколирования любых проблем, возника ющих при отправке электронной почты. Допустимо использовать функцию error_log ( ) , чтобы получать сообщения об ошибке по электронной почте. Однако это становится невозможным, если отправить почту трудно или не уда ется.
1 <?php
2 $PageTitle = "Sending Emails";
3 require ("header.php");
4 if ($BeenSubmitted) {
5 if ($MailTo) {.
6 if (mail($MailTo, $Subject, $Body, "From: $MailFrom")) {
7print ("<BxCENTERxFONT COLOR=BLUE>Your email has been
successfully sent!</FONTx/CENTERx/B>\n") ;
8} else {
9 print ("<BxCENTERxFONT COLOR=RED>Your email was not
successfully sent due to a system error!</FONTx/CENTER>
</B>\n");
10 error_log ("Unable to send an email to $MailTo from
$MailFrom at " . time(). "\n", 3, "errors.txt");
else
11}
12print (."<BxCENTERxFONT COLOR=RED>Please enter the recipient's
13mail to address! </FONTx/CENTERx/B>\n") ;
14 }
15 }
16 ?>
17 <FORM ACTION="email.php" METHOD=POST>
18 Recipient's Email Address: <INPUT TYPE=TEXT NAME="MailTo"
' SIZE="50"xBR>
19 Your Email Address: <INPUT TYPE=TEXT NAME="MailFrom" SIZE="50"xBR>
20 Email Subject: <INPUT TYPE=TEXT NAME="Subject" SIZE="80"xBR>
21 Email Body:<TEXTAREA NAME="Body" ROWS="10" CObS="50">
22 </TEXTAREAxP>
23 <INPUT TYPE=HIDDEN NAME=BeenSubmitted VALUE=TRUE>
24 <INPUT TYPE=SUBMIT NAME="SUBMIT" VALUE="Submit!">
25 </FORM>
26 <?php
27 require ("footer.php");
28 ?>

if (imail($MailTo,$Subject,$Body,"From:$MailFrom")){