PHP Try Catch 예제: 예외 및 오류 처리 튜토리얼

예외란 무엇입니까?

오류는 프로그램 자체에서 처리할 수 없는 예상치 못한 프로그램 결과입니다.

프로그램을 수정하면 오류가 해결됩니다. 오류의 예로는 실행이 멈추지 않는 무한 루프가 있습니다.

예외는 프로그램 자체에서 처리할 수 있는 예상치 못한 프로그램 결과입니다.

예외의 예로는 존재하지 않는 파일을 열려고 시도하는 것이 있습니다.

이 예외는 파일을 생성하거나 사용자에게 파일 검색 옵션을 제공하여 처리할 수 있습니다.

예외를 처리하는 이유는 무엇입니까?

  • 최종 사용자를 매우 짜증나게 하거나 짜증나게 할 수 있는 예상치 못한 결과가 페이지에서 발생하지 않도록 하세요.
  • 악의적인 사용자가 당사 애플리케이션을 공격하는 데 사용할 수 있는 정보를 노출하지 않음으로써 당사 애플리케이션의 보안을 향상시킵니다.
  • Php 예외는 예측 가능한 오류가 발생할 경우 프로그램의 정상적인 흐름을 변경하는 데 사용됩니다.

PHP 오류 처리

오류가 발생하면 구성 설정에 따라 PHP 발생한 오류와 관련된 정보와 함께 웹 브라우저에 오류 메시지를 표시합니다.

PHP는 오류를 처리하는 다양한 방법을 제공합니다.

우리는 일반적으로 사용되는 세 가지 방법을 살펴보겠습니다.

  1. 다이 스테이트먼트– 다이 기능은 에코와 종료 기능을 하나로 결합합니다. 오류가 발생하면 메시지를 출력하고 스크립트 실행을 중지하려는 경우 매우 유용합니다.
  2. 사용자 정의 오류 핸들러 – 오류가 발생할 때마다 호출되는 사용자 정의 함수입니다.
  3. PHP 오류 보고 – PHP 오류 보고 설정에 따른 오류 메시지입니다. 이 방법은 오류의 원인을 전혀 모를 때 개발 환경에서 매우 유용합니다. 표시된 정보는 애플리케이션을 디버깅하는 데 도움이 될 수 있습니다.

오류 처리 예시

이제 오류 처리 루틴이 포함된 몇 가지 간단한 예를 살펴보겠습니다.

텍스트 파일을 사용하여 데이터를 저장하는 애플리케이션을 개발했다고 가정해 보겠습니다. 파일에서 데이터를 읽으려고 시도하기 전에 파일이 있는지 확인하고 싶을 수도 있습니다.

아래 코드는 위의 예를 구현합니다.

<?php
$denominator = 0;
echo 2 / $denominator;
?>

phptuts 폴더에 simple_error.php 파일을 저장했다고 가정하고 URL을 엽니다. http://localhost/phptuts/simple_error.php

다음과 같은 결과가 나옵니다

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 예외 핸들

참고 : "파일을 찾을 수 없습니다"와 같은 메시지를 표시하는 대신 위에 표시된 것과 같은 메시지를 표시하는 것이 좋은 보안 관행입니다.

사용자 정의 오류 처리기를 사용하는 또 다른 예를 살펴보겠습니다.

사용자 정의 오류 처리기는 기본 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 오류 처리


위의 예에서 볼 수 있듯이 사용자 정의 오류 처리기는 다음과 같은 점에서 강력합니다.

  • 이를 통해 오류 메시지를 사용자 정의할 수 있습니다.
  • 사용자 정의 오류 처리기에는 파일/데이터베이스에 오류를 로깅하고 개발자에게 이메일을 보내는 등의 기능도 포함될 수 있습니다.

이제 세 번째 유형의 오류 처리를 살펴보겠습니다. 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 예외 예제” 문자열을 메시지 매개변수로 전달합니다.

위 코드는 다음과 같은 메시지를 출력합니다.

PHP의 PHP 예외 핸들

이제 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의 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의 PHP 예외 핸들

PHP 파일로 돌아가서 다음 다이어그램과 같이 매개변수로 -1을 전달합니다.

PHP의 PHP 예외 핸들

URL로 이동 http://localhost/phptuts/multiple_exceptions.php.

어떤 결과를 얻나요? 매개변수로 3을 전달합니다.

어떤 결과를 얻나요?

요약

  • 오류는 PHP 코드에서 발생하는 예상치 못한 결과입니다.
  • 오류 처리로 애플리케이션 성능이 향상됩니다.
  • PHP에는 PHP가 오류를 보고하는 방식을 사용자 정의하는 데 사용할 수 있는 함수가 내장되어 있습니다.
  • 예외는 오류와 비슷하지만 발생 시 catch 블록을 사용하여 포착할 수 있습니다.
  • 오류 정보를 표시하는 오류 메시지를 표시하는 것은 나쁜 보안 관행으로 간주됩니다.