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는 오류 처리 기능을 정의하는 프레임 워크를 제공합니다.

이 함수는 최소 2 개의 매개 변수 (오류 수준 및 오류 메시지)를 처리 할 수 ​​있어야하지만 최대 5 개의 매개 변수 (옵션 : 파일, 줄 번호 및 오류 컨텍스트)를 허용 할 수 있습니다.

통사론

error_function(error_level,error_message, error_file,error_line,error_context);

Sr. 아니요 매개 변수 및 설명
1

error_level

필수-사용자 정의 오류에 대한 오류 보고서 수준을 지정합니다. 값 숫자 여야합니다.

2

error_message

필수-사용자 정의 오류에 대한 오류 메시지를 지정합니다.

error_file

선택 사항-오류가 발생한 파일 이름을 지정합니다.

4

error_line

선택 사항-오류가 발생한 행 번호를 지정합니다.

5

error_context

선택 사항-오류 발생시 사용중인 모든 변수 및 해당 값을 포함하는 배열을 지정합니다.

가능한 오류 수준

이러한 오류 보고서 수준은 사용자 정의 오류 처리기를 사용할 수있는 다양한 유형의 오류입니다. 이 값은 다음을 사용하여 조합하여 사용됩니다.| 운영자

Sr. 아니요 상수 및 설명
1

.E_ERROR

치명적인 런타임 오류. 스크립트 실행이 중지됨

1
2

E_WARNING

치명적이지 않은 런타임 오류. 스크립트 실행이 중지되지 않습니다.

2

E_PARSE

컴파일 시간 구문 분석 오류. 구문 분석 오류는 구문 분석기에 의해서만 생성되어야합니다.

4
4

E_NOTICE

런타임 알림. 스크립트가 오류 일 수 있지만 스크립트를 정상적으로 실행할 때도 발생할 수 있음을 발견했습니다.

8
5

E_CORE_ERROR

PHP를 처음 시작할 때 발생하는 치명적인 오류.

16
6

E_CORE_WARNING

치명적이지 않은 런타임 오류. 이것은 PHP의 초기 시작 중에 발생합니다.

32
7

E_USER_ERROR

사용자가 생성 한 치명적인 오류입니다. 이것은 프로그래머가 PHP 함수 trigger_error ()를 사용하여 설정 한 E_ERROR와 같습니다.

256
8

E_USER_WARNING

치명적이지 않은 사용자 생성 경고입니다. 이것은 프로그래머가 PHP 함수 trigger_error ()를 사용하여 설정 한 E_WARNING과 같습니다.

512
9

E_USER_NOTICE

사용자 생성 통지. 이것은 프로그래머가 PHP 함수 trigger_error ()를 사용하여 설정 한 E_NOTICE와 같습니다.

1024
10

E_STRICT

런타임 알림. PHP가 코드에 대한 변경 사항을 제안하도록하여 코드의 최상의 상호 운용성과 호환성을 보장합니다.

2048
11

E_RECOVERABLE_ERROR

캐치 가능한 치명적인 오류입니다. 이것은 E_ERROR와 비슷하지만 사용자 정의 핸들에 의해 잡힐 수 있습니다 (set_error_handler () 참조)

4096
12

E_ALL

레벨 E_STRICT를 제외한 모든 오류 및 경고 (E_STRICT는 PHP 6.0부터 E_ALL의 일부가 됨)

8191

위의 모든 오류 수준은 다음 PHP 내장 라이브러리 함수를 사용하여 설정할 수 있습니다. 여기서 level 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"블록에 있어야합니다. 예외가 트리거되지 않으면 코드가 정상적으로 계속됩니다. 그러나 예외가 트리거되면 예외가 "발생"됩니다.

  • Throw− 이것이 예외를 트리거하는 방법입니다. 각 "던지기"에는 최소한 하나의 "잡기"가 있어야합니다.

  • Catch − "catch"블록은 예외를 검색하고 예외 정보를 포함하는 객체를 생성합니다.

예외가 발생하면 명령문 다음에 나오는 코드가 실행되지 않고 PHP는 첫 번째 일치하는 catch 블록을 찾으려고 시도합니다. 예외가 잡히지 않으면 "Uncaught Exception ..."과 함께 PHP 치명적 오류가 발생합니다.

  • 예외가 발생하고 PHP 내에서 포착 ( "catched") 될 수 있습니다. 코드는 try 블록으로 둘러싸 일 수 있습니다.

  • 각 시도에는 해당 catch 블록이 하나 이상 있어야합니다. 여러 catch 블록을 사용하여 다른 클래스의 예외를 포착 할 수 있습니다.

  • 예외는 catch 블록 내에서 throw (또는 다시 throw) 될 수 있습니다.

다음은 코드 조각입니다.이 코드를 파일에 복사하여 붙여넣고 결과를 확인하십시오.

<?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() − backtrace ()의 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 오류 처리 함수에서 전체 오류 처리 함수 세트 확인