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);

Старший Нет Параметр и описание
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, где уровень 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- Функция, использующая исключение, должна находиться в блоке "попытки". Если исключение не сработает, код продолжится в обычном режиме. Однако если срабатывает исключение, оно «выбрасывается».

  • Throw- Вот как вы вызываете исключение. В каждом «броске» должен быть хотя бы один «улов».

  • Catch - Блок «catch» извлекает исключение и создает объект, содержащий информацию об исключении.

При возникновении исключения код, следующий за оператором, не будет выполнен, и PHP попытается найти первый соответствующий блок catch. Если исключение не обнаружено, выдается критическая ошибка PHP с сообщением «Неперехваченное исключение ...

  • Исключение может быть создано и перехвачено ("отловлено") в PHP. Код может быть заключен в блок попытки.

  • Каждая попытка должна иметь как минимум один соответствующий блок 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() - сформированная строка трассировки

Создание настраиваемого обработчика исключений

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

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.