Обработка ошибок - это процесс обнаружения ошибок, вызванных вашей программой, а затем принятия соответствующих мер. Если вы будете правильно обрабатывать ошибки, это может привести ко многим непредвиденным последствиям.
Содержание:
Это очень просто в PHP для обработки ошибок.
Использование функции die()
При написании вашей программы PHP вы должны проверить все возможные условия ошибки перед тем, как идти вперед, и при необходимости предпринять соответствующие действия.
Попробуйте привести пример без файла / tmp / test.xt и с этим файлом.
<?php
if(!file_exists ("/ tmp /test.txt")) {
die("File not found");
} else {
$file = fopen("/ tmp / test.txt" , "r " );
print "Opend file sucessfully";
}
// Test of the code here.
?>
Таким образом, вы можете написать эффективный код. Используя вышеприведенную технику, вы можете остановить свою программу всякий раз, когда она выдает ошибки и отображает более содержательные и удобные для пользователя сообщения.
Определение пользовательской функции обработки ошибок
Вы можете написать свою собственную функцию для обработки любой ошибки. PHP предоставляет вам структуру для определения функции обработки ошибок.
Эта функция должна иметь возможность обрабатывать минимум два параметра (уровень ошибки и сообщение об ошибке), но может принимать до пяти параметров (опционально: файл, номер строки и контекст ошибки) -
Синтаксис
error_function(error_level,error_message, error_file,error_line,error_context);
| # | Параметр | Описание |
|---|---|---|
| 1 | error_level | Обязательный параметр - задает уровень отчета об ошибке для пользовательской ошибки. Значение должно быть числом. |
| 2 | error_message | Обязательный параметр - указывает сообщение об ошибке для пользовательской ошибки |
| 3 | error_file | Необязательный. Указывает имя файла, в котором произошла ошибка. |
| 4 | error_line | Необязательный. Указывает номер строки, в которой произошла ошибка. |
| 5 | error_context | Необязательный. Указывает массив, содержащий каждую переменную, и их значения, используемые при возникновении ошибки. |
Возможные уровни ошибок
Эти уровни отчетов об ошибках представляют собой различные типы ошибок, к которым может использоваться пользовательский обработчик ошибок. Эти значения используются в комбинации с использованием | оператор
| # | Константа | Описание | Значение |
|---|---|---|---|
| 1 | .E_ERROR | Неустранимая ошибки во время выполнения. Выполнение сценария останавливается | 1 |
| 2 | E_WARNING | Нефатальные ошибки во время выполнения. Выполнение скрипта не останавливается | 2 |
| 3 | E_PARSE | Ошибки анализа времени компиляции. Ошибки анализа должны генерироваться только парсером. | 4 |
| 4 | E_NOTICE | Уведомления о времени выполнения. Скрипт нашел что-то, что может быть ошибкой, но может также произойти при обычном сценарии | 8 |
| 5 | E_CORE_ERROR | Неустранимая ошибки, возникающие во время первоначального запуска PHP. | 16 |
| 6 | E_CORE_WARNING | Нефатальные ошибки во время выполнения. Это происходит во время первоначального запуска PHP. | 32 |
| 7 | E_USER_ERROR | Неустранимая пользовательская ошибка. Это похоже на набор E_ERROR программиста, использующий функцию PHP trigger_error() | 256 |
| 8 | E_USER_WARNING | Нефатальное пользовательское предупреждение. Это похоже на E_WARNING, установленный программистом с использованием функции PHP trigger_error() | 512 |
| 9 | E_USER_NOTICE | Пользовательское уведомление. Это похоже на набор E_NOTICE, заданный программистом с использованием функции PHP trigger_error() | 1024 |
| 10 | E_STRICT | Уведомления о времени выполнения. Включите, чтобы PHP предлагал изменения в вашем коде, что обеспечит лучшую совместимость и передовую совместимость вашего кода. | 2048 |
| 11 | E_RECOVERABLE_ERROR | Ловкая ошибка. Это похоже на E_ERROR, но может быть захвачен определяемым пользователем дескриптором (см. Также set_error_handler()) | 4096 |
| 12 | E_ALL | Все ошибки и предупреждения, кроме уровня E_STRICT(E_STRICT будет частью E_ALL с PHP 6.0) | 8191 |
Все указанные выше уровни ошибок можно задать, используя встроенную библиотечную функцию PHP, где уровень ошибки будет любым значением, определенным в таблице выше.
int error_reporting ([ int $ level])Ниже приведен способ создания одной функции обработки ошибок -
<?php
function handleError($errno, $errstr,$error_file,$error_line) {
echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
echo "<br>";
echo "Terminating PHP Script";
die();
}
?>
После того, как вы определили свой собственный обработчик ошибок, вам нужно установить его с помощью встроенной библиотеки set_error_handler. Теперь давайте рассмотрим пример, вызвав функцию, которая не существует.
<?php
error_reporting( E_ERROR );
function handleError($errno, $errstr,$error_file,$error_line) {
echo "<b>Error:</b> [$errno] $errstr - $error_file:$error_line";
echo "<br>";
echo "Terminating PHP Script";
die();
}
//set error handler
set_error_handler("handleError");
//trigger error
myFunction();
?>
Обработка исключений
PHP 5 имеет модель исключения, аналогичную модели других языков программирования. Исключения важны и обеспечивают лучший контроль над обработкой ошибок. Позволяет объяснить там новое ключевое словосвязанное с исключениями.
- Try - функция, использующая исключение, должна находиться в блоке «try». Если исключение не запускается, код будет продолжен как обычно. Однако, если исключение инициируется, исключение «бросается».
- Throw - это то , как вы вызываете исключение. Каждый «бросок» должен иметь хотя бы один «улов».
- Catch. Блок «catch» извлекает исключение и создает объект, содержащий информацию об исключении.
- Когда генерируется исключение, код, следующий за оператором, не будет выполнен, а PHP попытается найти первый соответствующий блок catch. Если исключение не поймано, PHP Fatal Error будет выпущена с помощью «Uncaught Exception ...»
- Исключение может быть выброшено, и поймал ( « пойманный ») в PHP. Код может быть окружен в блоке try.
- Каждая попытка должна иметь по крайней мере один соответствующий блок catch. Для блокировки различных классов исключений можно использовать несколько блоков catch.
- Исключения могут быть сброшены (или повторно выбраны) в блоке catch.
Ниже приведен фрагмент кода, скопируйте и вставьте этот код в файл и проверьте результат.
<?php
try {
$error = 'Always throw this error';
throw new Exception($error);
// Code following an exception is not executed.
echo 'Never executed';
}catch (Exception $e) {
echo 'Caught exception: ', $e->getMessage(), "\n";
}
// Continue execution
echo 'Hello World';
?>
В приведенном выше примере функция $e->getMessage используется для получения сообщения об ошибке. Существуют следующие функции, которые могут использоваться из класса Exception.
- GetMessage() - сообщение об исключении
- GetCode() - код исключения
- GetFile() - исходное имя файла
- GetLine() - исходная строка
- GetTrace() - n массив backtrace()
- GetTraceAsString() - сформированная строка трассировки
Создание настраиваемого обработчика исключений
Вы можете определить собственный собственный обработчик исключений. Используйте следующую функцию для установки пользовательской функции обработчика исключений.
string set_exception_handler(callback $exception_handler)Здесь exception_handler - это имя вызываемой функции, когда происходит неперехваченное исключение. Эта функция должна быть определена перед вызовом set_exception_handler().
пример
<?php
function exception_handler($exception) {
echo "Uncaught exception: " , $exception->getMessage(), "\n";
}
set_exception_handler('exception_handler');
throw new Exception('Uncaught Exception');
echo "Not Executed\n";
?>
С уважением, авторы сайта Компьютерапия