Внимание! Сайт переехал на новый домен sayt-sozdat.ru. Пожалуйста, обновите страницы закладок с новыми URL
×
Закрытие
3
×

Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.

Для скачивания исходных файлов необходимо авторизоваться под своим аккаунтом через соответствующую форму.

Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.

Устанавливаем графический редактор GIMP

  1. Выбор графического редактора
  2. Устанавливаем программу GIMP
  3. Устанавливаем Руководство пользователя

Здравствуйте уважаемый посетитель!

При создании и развитии сайта не обойтись без графического редактора. Этот инструмент необходим для формирования и обработки различных графических элементов, без которых сайт попросту не сможет существовать. Поэтому в наборе инструментов вебмастера графический редактор занимает важнейшее место.

В статье Устанавливаем бесплатный графический редактор GIMP речь пойдет о бесплатной программе GIMP, которая позволяет в полной мере решать вопросы по созданию элементов дизайна веб-страниц. И будет показано, как ее установить на локальный компьютер.

Кроме того здесь можно будет посмотреть, как в этот редактор добавить встроенное "Руководство пользователя", а также приведен бесплатный видеокурс, где можно поближе с ним познакомиться.

Для тех же, кто хочет заниматься дизайном на платном Adobe Photoshop (фотошоп), здесь также упомянут и такой вариант, основанный на использовании продления льготного бесплатного периода фотошопа на неопределенное время...

Cайт на практическом примере

Текущее состояние создаваемого сайта

Здесь можно посмотреть текущее состояние сайта, создаваемого в рамках цикла статей Самописный сайт с нуля своими руками.

Исходные файлы данного сайта можно скачать из прилагаемых к статьям дополнительных материалов.

Вы здесь: Главная → Сборник статей → Обработка ошибок → Обработка критических ошибок PHP


Автор: / Дата:

Обработка критических ошибок PHP

Обработка критических ошибок PHP

Здравствуйте, уважаемый посетитель!

Сегодня займемся обработкой критических (фатальных) ошибок PHP, приводящих к внутренней ошибке сервера. Где помимо ранее рассмотренного сохранения сообщений в специально выделенном журнале, также будет предусмотрена и их отправка администратору сайта по email.

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

Содержание


  • Порядок обработки критических ошибок PHP
  • Передача данных об ошибке в виде GET-параметров
  • Получение данных из GET-запроса
  • Сохранение сообщений в журнале (лог-файле)
  • Отправка уведомлений по email
  • Исходные файлы сайта

Порядок обработки критических ошибок PHP


В предыдущей статье мы рассмотрели обработку не фатальных ошибок, которая заключалась только лишь в сохранении соответствующих сообщений в отведенном для этого лог-файле. При этом все необходимые операции мы производили в одном месте - непосредственно в обработчике ошибок.

Механизм обработки критических ошибок несколько сложнее. Он предусматривает, кроме сохранения записей в лог-файле, также и отправку уведомлений по email. Причем это должно происходить, как при переходе на страницу 500 непосредственно из обработчика, так и в случае возникновения других внутренних ошибок сервера при выполнении директивы ErrorDocument 500 в файле .htaccess

Поэтому в данном случае мы будем задействовать как сам обработчик, так и предназначенный для отображения страницы 500 файл page_500.php, в котором будут выполняться следующие действия:

  • в обработчике - передача данных об ошибке в виде GET-параметров при редиректе на страницу 500 в файл page_500.php;
  • в файле page_500.php - преобразование значений GET-параметров в PHP-переменные для формирования сообщения об ошибке;
  • в файле page_500.php - сохранение сообщений в лог-файле;
  • в файле page_500.php — отправка уведомлений по email.

Иными словами, механизм обработки критических ошибок будет включать в себя формирование необходимых данных в обработчике, передачу их в качестве GET-параметров в файл page_500.php, а далее в файле page_500.php - преобразование полученных GET-параметров в переменные с последующим сохранением соответствующих сообщений в журнале и передачей их по email.

Для более подробного пояснения рассмотрим практическую реализацию этого функционала отдельно по каждой его части.

Передача данных об ошибке в виде GET-параметров


Ранее при создании функции обработчика фатальных ошибок PHP, основная задача которой на том этапе заключалась в их перехвате, мы выполняли перенаправление на страницу 500 (файле page_500.php) с помощью функции отправки HTTP-заголовка header().

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

Это можно сделать двумя способами: либо использовать переменные сессий, либо GET-параметры, добавленные к URL, используемому при редиректе на страницу 500.

В данном случае воспользуемся вторым вариантом - передача данных об ошибках будет происходить с использованием GET-параметров. Для чего в ранее созданный обработчик фатальных ошибок добавим следующий код, который обеспечит необходимые преобразования (добавленные и измененные строки выделены светлым фоном).

  1. <?php

  2. //----Перехват и обработка фатальных ошибок PHP----

  3. function fatal_php(){ //Пользовательская функция

  4. $error = error_get_last(); //Получение информации о последней произошедшей ошибке

  5. if ($error !== NULL && in_array($error['type'], array(E_ERROR, E_PARSE, E_CORE_ERROR, E_COMPILE_ERROR))){ //Если ошибка произошла и ее тип соответствует фатальной ошибке

  6. $errors = array( //Формирования массива констант ошибок

  7. E_ERROR => 'E_ERROR',

  8. E_PARSE => 'E_PARSE',

  9. E_CORE_ERROR => 'E_CORE_ERROR',

  10. E_COMPILE_ERROR => 'E_COMPILE_ERROR',

  11. );

  12. $errtype = $error['type']; //Тип (уровень) ошибки в виде целого числа

  13. $errmessage = urlencode($error['message']); //Сообщение об ошибке

  14. $errfile = urlencode($error['file']); //Имя файла

  15. $errline = $error['line']; //Номер строки

  16. $errurl = $_SERVER['REQUEST_URI']; //URL страницы, на которой произошла ошибка

  17. $domen = 'http://'.$_SERVER['SERVER_NAME']; //Домен сайта

  18. header("Location: $domen/page_500.php?type=$errors[$errtype]&message=$errmessage&file=$errfile&line=$errline&url=$errurl"); //Редирект на страницу 500 с передачей GET-параметров

  19. exit; //Прекращение выполнения текущего скрипта

  20. }

  21. }

  22. register_shutdown_function('fatal_php'); //Регистрация пользовательской функции обработчика фатальных ошибок PHP

  23. ?>

Рис.1 Формирование в обработчике данных об ошибке в виде GET-параметров

Здесь, как и при обработке не фатальных ошибок используется массив соответствия констант (поз.6÷11), с помощью которого происходит преобразование типа критической ошибки PHP, полученной функцией error_get_last() (поз.4) в виде целого числа, в соответствующую ей константу: 1E_ERROR, 4E_PARSE, 16E_CORE_ERROR, 64E_COMPILE_ERROR. Что позволяет представлять информацию об ошибке в более удобном для просмотра виде.

Ну а далее переменным присваиваются значения, соответствующие ассоциативному массиву описания последней произошедшей ошибки, с ключами: type (поз.12), message (поз.13), file (поз.14) и line (поз.15).

При этом следует обратить внимание на то, что для переменных с описанием ошибки $errmessage (поз.13) и имени файла $errfile (поз.14) применена функция urlencode(). Которая обеспечивает замену не предназначенных для использования в ссылке не цифробуквенных символов на знак процента "%" в паре с шестнадцатеричными числами.

И в итоге, полученные значения при отправке HTTP-заголовка header() указываются в качестве GET-параметров (поз.18) с применением специальных символов в следующем виде: ?type=$errors[$errtype]&message=$errmessage&file=$errfile&line=$errline&url=$errurl.

После того, как мы внесем согласно рис.1 дополнения в код обработчика, можно косвенно оценить правильность выполненных преобразований. Для этого достаточно создать в каком-нибудь месте кода PHP одну из возможных фатальных ошибок. После чего открыть или обновить соответствующую страницу и проверить в адресной строке браузера, передаются ли в запросе на страницу 500 сформированные GET-параметры.

На скриншоте показан вариант вывода страницы "Получить скидку", у которой в код файла poluchit-skidku.php внесена синтаксическая ошибка, вызывающая критическую ошибку PHP.

Проверка передачи GET-параметров в запросе на страницу 500

Рис.2 Проверка передачи GET-параметров в запросе на страницу 500

Как видно, при редиректе на страницу 500 в адресе присутствуют сформированные GET-параметры с данными об ошибке. Что и требовалось получить.

Однако, следует учесть, что перенаправление на страницу 500 может происходить не только из обработчика при возникновении критической ошибке PHP, но и при других внутренних ошибках сервера, вызывающих выполнение директивы ErrorDocument 500 в файле .htaccess.

А для того, чтобы в этом случае в запросе в качестве GET-параметра передавалась информация об URL страницы, при открытии которой произошла ошибка, следует дополнить эту директиву переменной REQUEST_URI в следующем виде.

  1. ErrorDocument 500 /page_500.php?url=%{REQUEST_URI}

Рис.3 Добавление значений GET-параметров в директиве ErrorDocument 500 в файле .htaccess

Таким образом первую часть мы выполнили - сформировали и передали для дальнейшей обработке в файл page_500.php данные о возникшей ошибке.

Получение данных из GET-запроса


Как выше было отмечено, обнаружение в обработчике критической ошибки сопровождается редиректом на страницу 500 с запросом со следующими GET-параметрами: type, message, file и line.

В случае же, если редирект осуществляется директивой ErrorDocument 500 в файле .htaccess, то в качестве GET-параметра передается только лишь URL страницы, при генерации которой произошла ошибка (ее описание формируется непосредственно при выполнении действий по сохранению и отправке сообщения).

Но чтобы можно было дальше оперировать с данными, переданными с помощью GET-параметров, необходимо сначала их извлечь из URL, а затем полученные значения присвоить соответствующим PHP-переменным.

Ранее нам уже приходилось получать из GET-запроса значения параметров. Однако учитывая, что подобная задача типовая и встречаются довольно часто, то наверное, будет не лишним рассмотреть этот вопрос еще раз, выделив для него отдельный раздел статьи.

Следует учесть, что в создаваемом сайте применяется способ построения адресной структуры с использованием ЧПУ (человеко-понятный урл), при котором в файле .htaccess выполняется преобразование входящих URL с помощью модуля MOD_REWRITE. О том, как это происходит, можно посмотреть здесь.

Вследствие этого обычным образом получить значения GET-параметров через ассоциативный массив $_GET[] не представляется возможным. Поэтому для этого необходимо применить дополнительные преобразования, не зависящие от способа построения адресной структуры сайта.

А наличие в PHP определенных функций позволяет достаточно просто справиться с этой задачей. Прежде всего речь идет о таких функциях как parse_url() и parse_str(), выполняющие нужные для этих целей преобразования:

  • parse_url() - разбирает URL и возвращает ассоциативный массив, содержащий все компоненты URL, которые в нём присутствуют;
  • parse_str() - разбирает строку в виде формата строки запроса URL и присваивает значения переменным в текущем контексте.

Исходя из этого, для извлечения из URL значений GET-параметров можно использовать следующий вариант PHP-кода.

  1. <?php

  2. //----Извлечение из GET-запроса данных об ошибке----

  3. $request_url = $_SERVER['REQUEST_URI']; //Получение URL-адреса

  4. $php_url_query = parse_url($request_url, PHP_URL_QUERY); //Извлечение из URL строки запроса с GET-параметрами

  5. parse_str($php_url_query, $get); //Разбор строки запроса и присвоение значений GET-параметров переменным в текущем контексте

  6. $errtype = $get['type']; //Данные о типе ошибки

  7. $errmessage = $get['message']; //Строка сообщения об ошибке

  8. $errfile = $get['file']; //Имя файла

  9. $errline = $get['line']; //Номер строки

  10. $errurl = $get['url']; //URL страницы

  11. $date = date("Y-m-d G:i:s"); //Получение даты и времени возникновения ошибки

  12. if (isset($errtype)) $error_message = "$date $errtype $errmessage в файле $errfile в строке $errline (URL: $errurl)\n"; //Сформированное сообщение об ошибке

  13. else

  14. $error_message ="$date Внутренняя ошибка сервера 500 (URL: $errurl)\n";

  15. echo $error_message;

  16. ?>

Рис.4 Извлечение из URL значений GET-параметров

Сначала здесь происходит разбор на компоненты с помощью функции parse_url() (поз.4) полученного URL-адреса (поз.3). Где с учетом заданной константы PHP_URL_QUERY происходит преобразование URL в строку запроса с GET-параметрами.

После чего с применением функции parse_str() выполняется разбор полученной строки на переменные с присвоением значений в текущем контексте в созданном массиве $get[] (поз.5).

В итоге из массива $get[] с соответствующими ключами будут получены значения всех имеющихся в запросе GET-параметров: $get['type'] (поз.6), $get['message'] (поз.7), $get['file'] (поз.8), $get['line'] (поз.9) и $get['url'] (поз.10).

А далее, в зависимости от того, откуда пришел запрос, формируется сообщение об ошибке. Если он поступил из обработчика при критической ошибке PHP, и соответственно, при значении переменной $errtype, отличным от NULL, то строка сообщения $error_message будет включать в себя такие данные, как: $errtype, $errmessage, $errfile и $errfile (поз.11).

Если же редирект на страницу 500 будет отправлен директивой ErrorDocument 500 в файле .htaccess, то в сообщении будет использоваться строка, указывающая на внутреннюю ошибку сервера (поз.13).

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

На приведенном ниже скриншоте показана страница 500 после соответствующих дополнений файла page_500.php, где отображаются данные GET-запроса в сообщении об ошибке.

Данные GET-запроса в сообщении об ошибке

Рис.5 Данные GET-запроса в сообщении об ошибке

Таким образом первую часть преобразований файла page_500.php мы сделали, а именно: получили данные об ошибке и сформировали сообщение, которое будет использовано в дальнейшем для его сохранения и отправки по email.

Сохранение сообщений в журнале (лог-файле)


Для записи в журнал критических ошибок воспользуемся PHP-скриптом, который в предыдущей статье был создан для сохранения не фатальных ошибок. По сути, этот скрипт можно считать типовым решением для подобных задач.

Отличием будет только то, что данный функциональный узел теперь будет располагаться не в самом обработчике ошибок, а в другом месте - в файле page_500.php.

А также, что для сохранения отчета здесь предусматривается использовать другой лог-файл. Отчего и заданное имя файла тоже будет иное. В остальном, всё полностью повторяет ранее используемый код.

Ниже показан файл page_500.php с дополнениями, обеспечивающими при первом обращении создание лог-файла с именем critical_php.txt с последующей записью в него сообщений об ошибках (вновь созданные строки выделены светлым фоном).

  1. <?php

  2. //----Извлечение из GET-запроса данных об ошибке----

  3. $request_url = $_SERVER['REQUEST_URI']; //Получение URL-адреса

  4. $php_url_query = parse_url($request_url, PHP_URL_QUERY); //Извлечение из URL строки запроса с GET-параметрами

  5. parse_str($php_url_query, $get); //Разбор строки запроса и присвоение значений GET-параметров переменным в текущем контексте

  6. $errtype = $get['type']; //Данные о типе ошибки

  7. $errtype = $get['message']; //Строка сообщения об ошибке

  8. $errtype = $get['file']; //Имя файла

  9. $errtype = $get['line']; //Номер строки

  10. $errtype = $get['url']; //URL страницы

  11. $date = date ("Y-m-d G:i:s"); //Получение даты и времени возникновения ошибки

  12. if (isset($errtype)) $error_message = "$date $errtype $errmessage в файле $errfile в строке $errline (URL: $errurl)\n"; //Сформированное сообщение об ошибке

  13. else

  14. $error_message ="$date Внутренняя ошибка сервера 500 (URL: $errurl)\n";

  15. //----Сохранение сообщений об ошибке в лог-файле----

  16. $max_message = 100; //Максимальное количество сообщений в лог-файле

  17. $filename = 'logs/critical_php.txt'; //Имя файла с директорией

  18. if (file_exists($filename)) { //Если файл существует

  19. $file_data = file($filename); //Считываем данные из файла в массив

  20. if (count($file_data) >= $max_message){ //Если количество элементов в массиве достигает максимального значения

  21. unset($file_data[0]); //Удаляем первый по списку элемент массива

  22. $clean_data = implode("", $file_data); //Преобразуем данные массива в строку

  23. file_put_contents($filename, $clean_data, LOCK_EX); //Записываем преобразованные данные с удаленным сообщением обратно в файл

  24. }

  25. }

  26. file_put_contents($filename, $error_message, FILE_APPEND | LOCK_EX); //Добавляем сообщение об ошибке в лог-файл (в конец файла). Если файла не существует, он будет создан

  27. ?>

Рис.6 Сохранение критических шибок в журнале

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

Для этого после дополнения файла page_500.php снова обновим страницу "Получить скидку", при генерации которой должна будет возникнуть временно добавленная в PHP-код критическая ошибка. И проверим создаться ли после этого в папке logs новый файл critical_php.txt. И если да, то записалось ли об этом в него сообщение.

Создание лог-файла критических ошибок

Рис.7 Создание лог-файла критических ошибок

Как видно, в папке logs добавился новый файл critical_php.txt. И если его открыть, то можно увидеть в нем сохраненное сообщение об ошибке.

Сохраненное сообщение об ошибке

Рис.8 Сохраненное сообщение об ошибке

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

Но так как используемый скрипт полностью повторяет предыдущий вариант, то здесь мы не будем этим заниматься. А сразу перейдем к последней операции по обработке критических ошибок - к отправке сообщений по email.

Отправка уведомлений по email


Нам уже неоднократно приходилось отправлять почтовые сообщения по email. При этом мы использовали в качестве основного варианта отправку почты через SMTP с авторизацией. Так как такой способ, в отличие от встроенной функции mail(), обеспечивает более низкий риск фильтрации от СПАМа, и соответственно, достаточно высокую степень вероятности доставки писем до адресатов.

Этому вопросу была уделена отдельная статья, где на примере отправки писем обратной связи подробно рассказывается об установке библиотеки PHPMailer и работе созданного для этой цели скрипта. Который в свою очередь выступает в роли типового инструмента отправки почты через SMTP с авторизацией.

И сейчас мы посмотрим как можно использовать этот скрипт и для случая отправки почтовых сообщений администратору, оповещая его о возникновении серьезных проблем в работе сайта.

Ниже показан файл page_500.php с добавленным кодом для оправки уведомлений по email, который полностью повторяет ранее используемое типовое решение (добавленные строки кода выделены светлым фоном).

  1. <?php

  2. //----Извлечение из GET-запроса данных об ошибке----

  3. $request_url = $_SERVER['REQUEST_URI']; //Получение URL-адреса

  4. $php_url_query = parse_url($request_url, PHP_URL_QUERY); //Извлечение из URL строки запроса с GET-параметрами

  5. parse_str($php_url_query, $get); //Разбор строки запроса и присвоение значений GET-параметров переменным в текущем контексте

  6. $errtype = $get['type']; //Данные о типе ошибки

  7. $errtype = $get['message']; //Строка сообщения об ошибке

  8. $errtype = $get['file']; //Имя файла

  9. $errtype = $get['line']; //Номер строки

  10. $errtype = $get['url']; //URL страницы

  11. $date = date("Y-m-d G:i:s"); //Получение даты и времени возникновения ошибки

  12. if ( isset($errtype)) $error_message ="$date $errtype $errmessage в файле $errfile в строке $errline (URL: $errurl)\n"; //Сформированное сообщение об ошибке

  13. else

  14. $error_message ="$date Внутренняя ошибка сервера 500 (URL: $errurl)\n";

  15. //----Сохранение сообщений об ошибке в лог-файле----

  16. $max_message = 100; //Максимальное количество сообщений в лог-файле

  17. $filename = 'logs/critical_php.txt'; //Имя файла с директорией

  18. if (file_exists($filename)) { //Если файл существует

  19. $file_data = file($filename); //Считываем данные из файла в массив

  20. if (count($file_data) >= $max_message){ //Если количество элементов в массиве достигает максимального значения

  21. unset($file_data[0]); //Удаляем первый по списку элемент массива

  22. $clean_data = implode("", $file_data); //Преобразуем данные массива в строку

  23. file_put_contents($filename, $clean_data, LOCK_EX); //Записываем преобразованные данные с удаленным сообщением обратно в файл

  24. }

  25. }

  26. file_put_contents($filename, $error_message, FILE_APPEND | LOCK_EX); //Добавляем сообщение об ошибке в лог-файл (в конец файла). Если файла не существует, он будет создан

  27. //----Отправка сообщений об ошибке по email----

  28. use PHPMailer\PHPMailer\PHPMailer; //Импорт классов PHPMailer в глобальное пространство имен

  29. use PHPMailer\PHPMailer\Exception;

  30. require 'PHPMailer/src/PHPMailer.php'; //Подключение библиотеки

  31. require 'PHPMailer/src/Exception.php';

  32. require 'PHPMailer/src/SMTP.php';

  33. $mail = new PHPMailer(); //Инициализация класса

  34. $from = 'feedback@avtobezugona.ru'; //Адрес почты, с которой идет отправка письма

  35. $to = 'admin@avtobezugona.ru'; //Адрес получателя

  36. $mail -> isSMTP(); //Применение протокола SMTP

  37. $mail -> Host = 'smtp.yandex.ru';//Адрес почтового сервера

  38. $mail -> SMTPAuth = true; //Включение режима авторизации

  39. $mail -> Username = 'feedback@avtobezugona.ru'; //Логин от доменной почты, подключенной к стороннему почтовому сервису (в данном случае в Яндекс.Почта)

  40. $mail -> Password = '27MrDon89'; //Пароль от доменной почты

  41. $mail -> SMTPSecure = 'ssl'; //Протокол шифрования

  42. $mail -> Port = '465'; //Порт сервера SMTP

  43. $mail -> CharSet = 'UTF-8'; //Кодировка

  44. $mail -> setFrom($from, 'Администратор'); //Адрес и имя отправителя

  45. $mail -> addAddress($to, 'Администратор'); //Адрес и имя получателя

  46. $mail -> isHTML (true); //Установка формата электронной почты в HTML

  47. $mail -> Subject = 'Внутренняя ошибка сервера'; //Тема письма (заголовок)

  48. $domen_name = $name_server = $_SERVER['SERVER_NAME']; //Имя домена

  49. if (isset($errtype)) $error_message = "date: $date<br>domen: $domen_name<br>type: $errtype<br>message: $errmessage<br>file: $errfile<br>line: $errline<br>url: $errurl"; //Сформированное сообщение об ошибке

  50. else

  51. $error_message = "date: $date<br>domen: $domen_name<br>message: Внутренняя ошибка сервера 500<br>url: $errurl";

  52. $mail -> Body = "

  53. <html>

  54. <body>

  55. $error_message

  56. </body>

  57. </html>

  58. "; //Содержимое письма

  59. $mail -> SMTPDebug = 0; //Включение отладки SMTP: 0 - выкл (для штатного использования), 1 = сообщения клиента, 2 - сообщения клиента и сервера

  60. if (!$mail -> send()) $alert = 'Ошибка, письмо не может быть отправлено: '.$mail -> ErrorInfo; //Вывод сообщения об ошибке

  61. ?>

Рис.9 Дополнение файла page_500.php для отправки уведомлений по email

Индивидуальной особенностью применения скрипта отправки почты здесь является только соответствующая данному случаю тема письма (заголовок), обозначенная, как "Внутренняя ошибка сервера" (поз.45). А также его содержание (поз.49÷55) со строкой сообщения в виде переменной $error_message (поз.52), сформированной из полученных данных об ошибке (поз.46÷48).

Где, в зависимости от того, откуда пришел запрос, строка сообщения будет включать в себя, либо полученные данные из обработчика в виде переменных: $errtype, $errmessage, $errfile и $errfile (поз.46). Либо, если редирект был отправлен директивой ErrorDocument 500 в файле .htaccess, в сообщении будет присутствовать указание на внутреннюю ошибку сервера (поз.48).

В остальном, как ранее говорилось, работа скрипта ничем не отличается от предыдущих вариантов его использования.

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

Для этого достаточно снова обновить страницу "Получить скидку", в PHP-код которой ранее была внесена синтаксическая ошибка, приводящая к внутренней ошибке сервера. После чего проверить в почтовом ящике администратора поступление входящего письма, уведомляющего об этом событии.

Полученное по email сообщение о критической ошибке

Рис.10 Полученное по email сообщение о критической ошибке

Проверка показала, вся необходимая информация об ошибках передается на почтовый ящик администратора в полном объеме и в заданном формате. Что подтверждает корректную работу скрипта отправки почты в этом режиме.


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

Исходные файлы сайта


Знак папкиИсходные файлы сайта с обновлениями, которые были сделаны в данной статье, можно скачать из прилагаемых дополнительных материалов:

  • Файлы каталога www
  • Таблицы базы данных MySQL

Дополнительные материалы бесплатно предоставляются только зарегистрированным пользователям.

Для скачивания исходных файлов необходимо авторизоваться под своим аккаунтом через соответствующую форму.

Для тех кто не зарегистрирован, можно это сделать на вкладке Регистрация.

С уважением, Николай Гришин


Комментарии


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

Буду Вам за это очень признателен!