Обработка ошибок по умолчанию в 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.