Учебники

PHP — обработка ошибок и исключений

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

В 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 Функции обработки ошибок