Последние учебники веб-разработки
×

PHP Руководство

PHP ГЛАВНАЯ PHP вступление PHP устанавливать PHP Синтаксис PHP переменные PHP Echo / Версия для печати PHP Типы данных PHP Строки PHP Константы PHP операторы PHP If...Else...Elseif PHP Switch PHP В то время как Loops PHP Для Loops PHP функции PHP Массивы PHP Сортировка массивов PHP Суперглобальные

PHP обращение

PHP форма обращение PHP форма Проверка PHP форма необходимые PHP форма URL/E-mail PHP форма полный

PHP продвинутый

PHP Массивы Мульти PHP Дата и время PHP Включают PHP файл обращение PHP файл Открыть / Read PHP файл Создание / запись PHP файл Загрузить PHP Cookies PHP Sessions PHP фильтры PHP Filters продвинутый PHP Ошибка обращение PHP исключение

MySQL Database

MySQL База данных MySQL соединение MySQL Create DB MySQL Create Таблица MySQL Insert Data MySQL Получить Последняя ID MySQL Вставка нескольких MySQL Prepared MySQL Select Data MySQL Delete Data MySQL Update Data MySQL Limit Data

PHP - XML

PHP XML Парсеры PHP SimpleXML Parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX вступление AJAX PHP AJAX База данных AJAX XML AJAX Live Search AJAX RSS Reader AJAX Голосование

PHP Examples

PHP Примеры PHP викторина PHP сертификат

PHP Справка

PHP массив PHP Календарь PHP Дата PHP каталог PHP Ошибка PHP Файловая система PHP Фильтр PHP FTP PHP HTTP PHP Libxml PHP почта PHP математический PHP Разное PHP MySQLi PHP SimpleXML PHP строка PHP XML PHP Zip PHP Часовые пояса

 

PHP Обработка ошибок


Обработка ошибок по умолчанию в PHP очень просто. Сообщение об ошибке с именем файла, номер строки и сообщение с описанием ошибки отправляется в браузер.


PHP Обработка ошибок

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

Это руководство содержит некоторые из наиболее распространенных ошибок методов в PHP проверки.

Мы покажем различные методы обработки ошибок:

  • Простой " die() " заявление
  • Пользовательские ошибки и триггеры ошибок
  • Отчет об ошибках

Основная обработка ошибок: Использование die() функция

Первый пример показывает простой скрипт, который открывает текстовый файл:

<?php
$file=fopen("welcome.txt","r");
?>

Если файл не существует, вы можете получить сообщение об ошибке, подобное следующему:

Warning : fopen(welcome.txt) [function.fopen]: failed to open stream:
No such file or directory in C:\webfolder\test.php on line 2

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

<?php
if(!file_exists("welcome.txt")) {
  die("File not found");
} else {
  $file=fopen("welcome.txt","r");
}
?>

Теперь, если файл не существует, вы получите сообщение об ошибке, как это:

File not found

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

Однако, просто остановить скрипт не всегда правильный путь. Давайте посмотрим на альтернативные функции PHP для обработки ошибок.


Создание пользовательского обработчика ошибок

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

Эта функция должна быть в состоянии обрабатывать как минимум два параметров (уровень ошибок и сообщение об ошибке) , но может принимать до пяти параметров (optionally: file, line-number, and the error context) :

Синтаксис

error_function(error_level,error_message,
error_file,error_line,error_context)
параметр Описание
error_level Необходимые. Определяет уровень отчета об ошибках для определенного пользователя ошибки. Должно быть числовое значение. Смотрите таблицу ниже для возможных уровней отчета об ошибке
error_message Необходимые. Определяет сообщение об ошибке для определенного пользователя ошибки
error_file Необязательный. Задает имя файла, в котором произошла ошибка
error_line Необязательный. Задает номер строки, в которой произошла ошибка
error_context Необязательный. Определяет массив, содержащий каждую переменную, и их значения, используется, когда произошла ошибка

Ошибка уровней отчетов

Эти уровни отчета об ошибке различных типов ошибок определенного пользователя обработчик ошибок может быть использован для:

Стоимость постоянная Описание
2 E_WARNING Нефатальные ошибки во время выполнения. Выполнение скрипта не остановлено
8 E_NOTICE Время выполнения уведомление. Сценарий нашел что-то, что может быть ошибкой, но может также произойти при выполнении сценария нормально
256 E_USER_ERROR Фатальные пользователи ошибка. Это как E_ERROR установленный программистом с помощью функции PHP trigger_error()
512 E_USER_WARNING Некритические пользователи предупреждение. Это как E_WARNING установленный программистом с помощью функции PHP trigger_error()
1024 E_USER_NOTICE Пользователь сгенерированные уведомления. Это как E_NOTICE установленный программистом с помощью функции PHP trigger_error()
4096 E_RECOVERABLE_ERROR Catchable фатальная ошибка. Это как E_ERROR , но может быть перехвачено определенным пользователем ручки (see also set_error_handler() )
8191 E_ALL Все ошибки и предупреждения (E_STRICT became a part of E_ALL in PHP 5.4)

Теперь давайте создадим функцию для обработки ошибок:

function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

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

Теперь, когда мы создали функцию обработки ошибок, мы должны решить, когда он должен быть запущен.


Установить обработчик ошибок

Обработчик ошибок по умолчанию для PHP является встроенным в обработчик ошибок. Мы собираемся сделать функцию выше обработчика ошибок по умолчанию для длительности сценария.

Можно изменить обработчик ошибок для применения только для некоторых ошибок, таким образом скрипт может обрабатывать различные ошибки по-разному. Однако, в этом примере мы будем использовать наш обработчик ошибок для всех ошибок:

set_error_handler("customError");

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

пример

Тестирование обработчика ошибок, пытаясь выходным переменным, которая не существует:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr";
}

//set error handler
set_error_handler("customError");

//trigger error
echo($test);
?>

Выход выше код должен быть что-то вроде этого:

Error: [8] Undefined variable: test

Trigger ошибки

В сценарии, где пользователи могут вводить данные полезно вызвать ошибки при возникновении недопустимого ввода. В PHP это делается с помощью trigger_error() функции.

пример

В этом примере ошибка возникает , если "test" переменная больше , чем "1" :

<?php
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below");
}
?>

Выход выше код должен быть что-то вроде этого:

Notice : Value must be 1 or below
in C:\webfolder\test.php on line 6

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

Возможные типы ошибок:

  • E_USER_ERROR - Fatal пользователей ошибка времени выполнения. Ошибки, которые не могут быть восстановлены из. Выполнение скрипта останавливается
  • E_USER_WARNING - Некритические пользователи предупреждения во время выполнения. Выполнение скрипта не остановлено
  • E_USER_NOTICE - по умолчанию. Пользователь генерируемого во время выполнения уведомления. Сценарий нашел что-то, что может быть ошибкой, но может также произойти при выполнении сценария нормально

пример

В этом примере E_USER_WARNING происходит , если "test" переменная больше , чем "1" . При возникновении E_USER_WARNING мы будем использовать наш обработчик ошибок и закончить сценарий:

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Ending Script";
  die();
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

Выход выше код должен быть что-то вроде этого:

Error: [512] Value must be 1 or below
Ending Script

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


Ведение журнала ошибок

По умолчанию, PHP отправляет журнал ошибок в системе регистрации сервера или файла, в зависимости от того, как конфигурация error_log установлен в файле php.ini. При использовании error_log() функции вы можете отправить журналы ошибок в указанный файл или удаленный пункт назначения.

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

Отправить сообщение об ошибке по E-Mail

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

<?php
//error handler function
function customError($errno, $errstr) {
  echo "<b>Error:</b> [$errno] $errstr<br>";
  echo "Webmaster has been notified";
  error_log("Error: [$errno] $errstr",1,
  "[email protected]","From: [email protected]");
}

//set error handler
set_error_handler("customError",E_USER_WARNING);

//trigger error
$test=2;
if ($test>=1) {
  trigger_error("Value must be 1 or below",E_USER_WARNING);
}
?>

Выход выше код должен быть что-то вроде этого:

Error: [512] Value must be 1 or below
Webmaster has been notified

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

Error: [512] Value must be 1 or below

Это не должно использоваться со всеми ошибками. Обычные ошибки должны быть авторизованы на сервере, используя систему по умолчанию протоколирования PHP.