Обработка ошибок — это процесс обнаружения ошибок, вызванных вашей программой, и последующего принятия соответствующих мер. Если вы правильно обработаете ошибки, это может привести ко многим непредвиденным последствиям.
В 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);
Sr.No | Параметр и описание |
---|---|
1 |
error_level Обязательный. Указывает уровень отчета об ошибке для пользовательской ошибки. Должно быть значением числа. |
2 |
сообщение об ошибке Обязательно — указывает сообщение об ошибке для пользовательской ошибки |
3 |
error_file Необязательно: указывает имя файла, в котором произошла ошибка |
4 |
error_line Необязательно: указывает номер строки, в которой произошла ошибка |
5 |
error_context Необязательно: указывает массив, содержащий все переменные и их значения, используемые при возникновении ошибки |
error_level
Обязательный. Указывает уровень отчета об ошибке для пользовательской ошибки. Должно быть значением числа.
сообщение об ошибке
Обязательно — указывает сообщение об ошибке для пользовательской ошибки
error_file
Необязательно: указывает имя файла, в котором произошла ошибка
error_line
Необязательно: указывает номер строки, в которой произошла ошибка
error_context
Необязательно: указывает массив, содержащий все переменные и их значения, используемые при возникновении ошибки
Возможные уровни ошибок
Эти уровни отчетов об ошибках — это различные типы ошибок, для которых может использоваться пользовательский обработчик ошибок. Эти значения могут использоваться в комбинации с использованием | оператор
Sr.No | Константа и описание | Значение |
---|---|---|
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 |
.E_ERROR
Фатальные ошибки времени выполнения. Выполнение скрипта остановлено
E_WARNING
Не фатальные ошибки времени выполнения. Выполнение скрипта не прекращается
E_PARSE
Ошибки синтаксического анализа во время компиляции. Ошибки разбора должны генерироваться только парсером.
E_NOTICE
Уведомления во время выполнения. Сценарий обнаружил что-то, что может быть ошибкой, но также может произойти при обычном запуске
E_CORE_ERROR
Неустранимые ошибки, возникающие при первоначальном запуске PHP.
E_CORE_WARNING
Не фатальные ошибки времени выполнения. Это происходит во время первоначального запуска PHP.
E_USER_ERROR
Фатальная ошибка, сгенерированная пользователем. Это похоже на E_ERROR, установленный программистом с помощью PHP-функции trigger_error ()
E_USER_WARNING
Не фатальное предупреждение, генерируемое пользователем. Это похоже на E_WARNING, установленный программистом с помощью PHP-функции trigger_error ()
E_USER_NOTICE
Пользовательское уведомление. Это похоже на E_NOTICE, установленный программистом с помощью PHP-функции trigger_error ()
E_STRICT
Уведомления во время выполнения. Включите, чтобы PHP предлагал изменения в вашем коде, которые обеспечат наилучшую совместимость и прямую совместимость вашего кода.
E_RECOVERABLE_ERROR
Ловимая фатальная ошибка. Это похоже на E_ERROR, но может быть перехвачено пользовательским дескриптором (см. Также set_error_handler ())
E_ALL
Все ошибки и предупреждения, кроме уровня E_STRICT (E_STRICT будет частью E_ALL начиная с PHP 6.0)
Все вышеперечисленные уровни ошибок могут быть установлены с помощью следующей функции встроенной библиотеки PHP, где уровень cab может быть любым из значений, определенных в приведенной выше таблице.
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(); } ?>
После того, как вы определили свой собственный обработчик ошибок, вам нужно установить его с помощью встроенной в PHP функции библиотеки 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. Если исключение не сработает, код продолжит работу как обычно. Однако если срабатывает исключение, исключение «выбрасывается».
-
Бросок — это то, как вы вызываете исключение. Каждый «бросок» должен иметь как минимум один «улов».
-
Catch — блок «catch» извлекает исключение и создает объект, содержащий информацию об исключении.
Try — функция, использующая исключение, должна находиться в блоке try. Если исключение не сработает, код продолжит работу как обычно. Однако если срабатывает исключение, исключение «выбрасывается».
Бросок — это то, как вы вызываете исключение. Каждый «бросок» должен иметь как минимум один «улов».
Catch — блок «catch» извлекает исключение и создает объект, содержащий информацию об исключении.
Когда генерируется исключение, код, следующий за оператором, не будет выполнен, и PHP попытается найти первый соответствующий блок catch. Если исключение не перехвачено, в PHP Fatal Error будет выдано «Uncaught Exception …
-
Исключение может быть сгенерировано и «поймано» в PHP. Код может быть заключен в блок try.
-
Каждая попытка должна иметь хотя бы один соответствующий блок catch. Несколько блоков catch могут использоваться для перехвата различных классов исключений.
-
Исключения могут быть выброшены (или переброшены) в блоке catch.
Исключение может быть сгенерировано и «поймано» в 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 массив обратной трассировки ()
-
getTraceAsString () — форматированная строка трассировки
getMessage () — сообщение об исключении
getCode () — код исключения
getFile () — имя файла источника
getLine () — исходная строка
getTrace () — n массив обратной трассировки ()
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"; ?>
Проверьте полный набор функций обработки ошибок в PHP Функции обработки ошибок