PHP Try Catch 예제: 예외 및 오류 처리 튜토리얼
예외란 무엇입니까?
오류는 프로그램 자체에서 처리할 수 없는 예상치 못한 프로그램 결과입니다.
프로그램을 수정하면 오류가 해결됩니다. 오류의 예로는 실행이 멈추지 않는 무한 루프가 있습니다.
예외는 프로그램 자체에서 처리할 수 있는 예상치 못한 프로그램 결과입니다.
예외의 예로는 존재하지 않는 파일을 열려고 시도하는 것이 있습니다.
이 예외는 파일을 생성하거나 사용자에게 파일 검색 옵션을 제공하여 처리할 수 있습니다.
예외를 처리하는 이유는 무엇입니까?
- 최종 사용자를 매우 짜증나게 하거나 짜증나게 할 수 있는 예상치 못한 결과가 페이지에서 발생하지 않도록 하세요.
- 악의적인 사용자가 당사 애플리케이션을 공격하는 데 사용할 수 있는 정보를 노출하지 않음으로써 당사 애플리케이션의 보안을 향상시킵니다.
- Php 예외는 예측 가능한 오류가 발생할 경우 프로그램의 정상적인 흐름을 변경하는 데 사용됩니다.
PHP 오류 처리
오류가 발생하면 구성 설정에 따라 PHP 발생한 오류와 관련된 정보와 함께 웹 브라우저에 오류 메시지를 표시합니다.
PHP는 오류를 처리하는 다양한 방법을 제공합니다.
우리는 일반적으로 사용되는 세 가지 방법을 살펴보겠습니다.
- 다이 스테이트먼트– 다이 기능은 에코와 종료 기능을 하나로 결합합니다. 오류가 발생하면 메시지를 출력하고 스크립트 실행을 중지하려는 경우 매우 유용합니다.
- 사용자 정의 오류 핸들러 – 오류가 발생할 때마다 호출되는 사용자 정의 함수입니다.
- PHP 오류 보고 – PHP 오류 보고 설정에 따른 오류 메시지입니다. 이 방법은 오류의 원인을 전혀 모를 때 개발 환경에서 매우 유용합니다. 표시된 정보는 애플리케이션을 디버깅하는 데 도움이 될 수 있습니다.
오류 처리 예시
이제 오류 처리 루틴이 포함된 몇 가지 간단한 예를 살펴보겠습니다.
텍스트 파일을 사용하여 데이터를 저장하는 애플리케이션을 개발했다고 가정해 보겠습니다. 파일에서 데이터를 읽으려고 시도하기 전에 파일이 있는지 확인하고 싶을 수도 있습니다.
아래 코드는 위의 예를 구현합니다.
<?php $denominator = 0; echo 2 / $denominator; ?>
phptuts 폴더에 simple_error.php 파일을 저장했다고 가정하고 URL을 엽니다. http://localhost/phptuts/simple_error.php
다음과 같은 결과가 나옵니다
위의 결과에서 볼 수 있듯이, 이는 우리 애플리케이션을 비전문적으로 보이게 만들고 사용자를 짜증나게 할 수 있습니다.
위의 코드를 수정하고 애플리케이션에 대한 오류 처리기를 작성하겠습니다.
<?php $denominator = 0; if ($denominator != 0) { echo 2 / $denominator; } else { echo "cannot divide by zero (0)"; } ?>
위 코드를 error_handling.php로 저장했다고 가정하고 URL을 열어주세요. http://localhost/phptuts/error_handling.php
참고 : "파일을 찾을 수 없습니다"와 같은 메시지를 표시하는 대신 위에 표시된 것과 같은 메시지를 표시하는 것이 좋은 보안 관행입니다.
사용자 정의 오류 처리기를 사용하는 또 다른 예를 살펴보겠습니다.
사용자 정의 오류 처리기는 기본 PHP 오류 처리 기능으로 설정되며 기본적으로 오류 번호와 메시지를 표시합니다.
아래 코드는 위 예제의 구현을 보여줍니다.
<?php function my_error_handler($error_no, $error_msg) { echo "Opps, something went wrong:"; echo "Error number: [$error_no]"; echo "Error Description: [$error_msg]"; } set_error_handler("my_error_handler"); echo (5 / 0); ?>
URL 열기 http://localhost/phptuts/custom_error_handler.php 당신은 다음과 같은 결과를 얻을 것이다
위의 예에서 볼 수 있듯이 사용자 정의 오류 처리기는 다음과 같은 점에서 강력합니다.
- 이를 통해 오류 메시지를 사용자 정의할 수 있습니다.
- 사용자 정의 오류 처리기에는 파일/데이터베이스에 오류를 로깅하고 개발자에게 이메일을 보내는 등의 기능도 포함될 수 있습니다.
이제 세 번째 유형의 오류 처리를 살펴보겠습니다. PHP 내장 함수 error_reporting 함수를 사용할 것입니다. 다음과 같은 기본 구문이 있습니다.
<?php error_reporting($reporting_level); ?>
이리,
- "error_reporting"은 PHP 오류 보고 기능입니다.
- "$reporting_level"은 선택 사항이며 보고 수준을 설정하는 데 사용할 수 있습니다. 보고 수준이 지정되지 않은 경우 PHP는 php.ini 파일에 지정된 기본 오류 보고 수준을 사용합니다.
보고 수준 | 상품 설명 | 예시 |
---|---|---|
E_경고 | 경고 메시지만 표시합니다. 스크립트 실행을 중단하지 않습니다. | error_reporting(E_WARNING); |
E_NOTICE | 프로그램이 정상적으로 실행되는 동안 발생할 수 있는 알림이나 오류가 발생할 수 있는 알림을 표시합니다. | error_reporting(E_ NOTICE); |
E_USER_ERROR | 사용자가 생성한 오류, 즉 사용자 정의 오류 처리기를 표시합니다. | error_reporting(E_ USER_ERROR); |
E_USER_WARNING | 사용자가 생성한 경고 메시지를 표시합니다. | error_reporting(E_USER_WARNING); |
E_USER_NOTICE | 사용자가 생성한 알림을 표시합니다. | error_reporting(E_USER_NOTICE); |
E_RECOVERABLE_ERROR | 치명적이지 않고 사용자 정의 오류 처리기를 사용하여 처리할 수 있는 오류를 표시합니다. | error_reporting(E_RECOVERABLE_ERROR); |
E_ALL | 모든 오류 및 경고를 표시합니다. | error_reporting(E_ ALL); |
오류와 예외의 차이점
- 일반적으로 오류는 복구할 수 없지만 예외가 발생하고 이를 포착하기 위한 것입니다.
- 예외는 객체 지향적 방식으로 처리됩니다. 즉, 예외가 발생하면 예외 세부 정보를 포함하는 예외 객체가 생성됩니다.
아래 표는 예외 객체 메소드를 보여줍니다.
방법 | 상품 설명 | 예시 |
---|---|---|
getMessage () | 예외 메시지를 표시합니다. |
<?php echo $e->getMessage(); ?> |
getCode() | 예외를 나타내는 숫자 코드를 표시합니다. |
<?php echo $e->getCode(); ?> |
파일 가져오기() | 예외가 발생한 파일 이름과 경로를 표시합니다. |
<?php echo $e->getFile(); ?> |
getLine() | 예외가 발생한 줄 번호를 표시합니다. |
<?php echo $e->getLine(); ?> |
getTrace() | 예외 이전의 역추적 배열을 표시합니다. |
<?php print_r( $e->getTrace()); ?> |
이전 get() | 현재 예외 이전에 이전 예외를 표시합니다. |
<?php echo $e->getPrevious(); ?> |
getTraceAsString() | 예외의 역추적을 배열 대신 문자열로 표시합니다. |
<?php echo $e->getTraceAsString(); ?> |
__toString() | 전체 예외를 문자열로 표시합니다. |
<?php echo $e->__toString(); ?> |
예외를 발생시키기 위한 기본 구문은 다음과 같습니다.
<?php throw new Exception("This is an exception example"); ?>
이리,
- "throw"는 예외를 발생시키는 데 사용되는 키워드입니다.
- “new Exception(…)”은 예외 객체를 생성하고 “This is an 예외 예제” 문자열을 메시지 매개변수로 전달합니다.
위 코드는 다음과 같은 메시지를 출력합니다.
이제 throw 및 catch 예외를 구현하는 예제를 살펴보겠습니다.
위의 예를 수정하고 try, throw 및 catch를 포함하겠습니다.
기본 구문은 다음과 같습니다.
<?php try { //code goes here that could potentially throw an exception } catch (Exception $e) { //exception handling code goes here } ?>
이리,
- "try{...}"는 잠재적으로 예외가 발생할 수 있는 실행될 코드 블록입니다.
- "catch(Exception $e){...}"는 던져진 예외를 포착하고 예외 개체를 변수 $e에 할당하는 코드 블록입니다.
아래 코드는 try, throw 및 catch 예외가 구현된 기본 예외 예제를 보여줍니다.
프로그램은 의도적으로 예외를 발생시킨 후 이를 포착합니다.
<?php try { $var_msg = "This is an exception example"; throw new Exception($var_msg); } catch (Exception $e) { echo "Message: " . $e->getMessage(); echo ""; echo "getCode(): " . $e->getCode(); echo ""; echo "__toString(): " . $e->__toString(); } ?>
URL 열기 http://localhost/phptuts/exception_handling.php 다음과 같은 결과가 나타납니다.
발생한 예외 유형에 따라 하나의 PHP try 문에 대해 여러 예외를 생성하는 것도 가능합니다.
에 대한 기사를 참조하세요. MySQL, PHP 데이터 액세스… 여러 예외의 구현 예
여러 예외
다중 예외는 여러 try catch 블록을 사용하여 던져진 예외를 처리합니다. 여러 예외는 다음과 같은 경우에 유용합니다.
- 발생한 예외에 따라 사용자 정의된 메시지를 표시하고 싶습니다.
- 발생한 예외에 따라 고유한 작업을 수행하려고 합니다.
아래 순서도는 여러 예외가 작동하는 방식을 보여줍니다.
여러 예외를 사용하는 예를 살펴보겠습니다.
전달된 분모로 숫자를 나누는 코드를 수정하겠습니다.
우리는 두 가지 유형의 예외가 발생할 것으로 예상합니다.
- XNUMX으로 나누기
- 음수로 나누기
단순화를 위해 catch 블록에는 예외 유형만 표시합니다.
Exception 클래스에 내장된 PHP는 예외를 발생시키는 데 사용됩니다.
예외 클래스를 확장하고 이를 사용하여 예외를 발생시키는 두 개의 클래스를 만듭니다.
아래 코드는 구현을 보여줍니다.
<?php class DivideByZeroException extends Exception {}; class DivideByNegativeException extends Exception {}; function process($denominator) { try { if ($denominator == 0) { throw new DivideByZeroException(); } else if ($denominator < 0) { throw new DivideByNegativeException(); } else { echo 25 / $denominator; } } catch (DivideByZeroException $ex) { echo "DIVIDE BY ZERO EXCEPTION!"; } catch (DivideByNegativeException $ex) { echo "DIVIDE BY NEGATIVE NUMBER EXCEPTION!"; } catch (Exception $x) { echo "UNKNOWN EXCEPTION!"; } } process(0); ?>
코드 테스트
phptuts 폴더에 multiple_Exceptions.php를 저장했다고 가정하겠습니다.
URL로 이동 http://localhost/phptuts/multiple_exceptions.php
PHP 파일로 돌아가서 다음 다이어그램과 같이 매개변수로 -1을 전달합니다.
URL로 이동 http://localhost/phptuts/multiple_exceptions.php.
어떤 결과를 얻나요? 매개변수로 3을 전달합니다.
어떤 결과를 얻나요?
요약
- 오류는 PHP 코드에서 발생하는 예상치 못한 결과입니다.
- 오류 처리로 애플리케이션 성능이 향상됩니다.
- PHP에는 PHP가 오류를 보고하는 방식을 사용자 정의하는 데 사용할 수 있는 함수가 내장되어 있습니다.
- 예외는 오류와 비슷하지만 발생 시 catch 블록을 사용하여 포착할 수 있습니다.
- 오류 정보를 표시하는 오류 메시지를 표시하는 것은 나쁜 보안 관행으로 간주됩니다.