>백엔드 개발 >PHP 튜토리얼 >PHP 사용자 정의 오류 처리

PHP 사용자 정의 오류 처리

小云云
小云云원래의
2017-11-15 16:33:282137검색

일반적으로 PHP는 치명적인 오류를 직접 출력하며, 개발자가 문제를 쉽게 찾을 수 있도록 오류 소스(파일 주소, 줄 번호) 및 이유 등을 출력합니다. 그러나 때로는 php.ini 설정이나 타사 프레임워크 구성 문제로 인해 이 정보가 출력되지 않을 수 있습니다. 이때 문제를 빠르게 찾는 데 도움이 되도록 관련 매개변수를 직접 설정하고 이러한 오류 메시지를 출력하는 방법을 배워야 합니다.

error_reporting은 php.ini의 PHP 전역 구성 매개변수입니다. 오류 출력 수준을 구성하는 데 사용되며 오류 출력 수준을 설정하는 데 사용할 수 있습니다.

error_reporting(int $level), $level이 0이면 오류 출력이 꺼집니다. 즉, 오류가 출력되지 않습니다.

set_error_handler

php의 기본 오류 처리는 메시지를 출력하는 것입니다. 그러나 때로는 다른 작업을 정의해야 하는 경우도 있으며, 이 경우 오류 처리 기능을 사용자 정의해야 합니다.

php는 자체 오류 처리 기능을 등록하는 데 도움이 되는 내장 함수 set_error_handler를 제공합니다. 함수 프로토타입은 다음과 같습니다:

mixed set_error_handler ( callback $error_handler [, int $error_types = E_ALL | E_STRICT ] )

오류 처리 함수가 등록되더라도 기본 동작은 계속 실행된다는 점에 주목할 가치가 있습니다. 즉, 오류가 발생하면 오류 메시지가 계속 출력되므로 프로그램에서 명시적으로 오류 수준을 0으로 설정한 다음 자체 오류 처리 기능을 등록해야 합니다. 이 접근 방식은 프로덕션 환경에서 특히 중요합니다. 문제가 발생하더라도 민감한 내부 오류 정보가 잠재적으로 악의적인 사용자에게 노출되지 않기 때문입니다. 사용자 정의 오류 처리 함수는 치명적인 오류(예: 컴파일 오류)를 처리할 수 없다는 점을 지적하는 것도 중요합니다.

다음은 사용자 정의 오류 처리 기능을 사용하는 예입니다.

<?php
error_reporting(0);
function error_handler($error_level, $error_message, $file, $line) {
    $exit = false;
    switch ($error_level) {
        case E_NOTICE:
        case E_USER_NOTICE:
            $error_type = &#39;Notice&#39;;
            break;
        case E_WARNING:
        case E_USER_WARNING:
            $error_type = &#39;Warning&#39;;
            break;
        case E_ERROR:
        case E_USER_ERROR:
            $error_type = &#39;Fatal Error&#39;;
            $exit = true;
            break;
        default:
            $error_type = &#39;Unknown&#39;;
            $exit = true;
            break;
    }
    printf("%s: %s in %s on line %d\n", $error_type, $error_message, $file, $line);
    if ($exit) {
        die();
    }
}
set_error_handler(&#39;error_handler&#39;);

echo $novar;
echo 3 / 0;
trigger_error('치명적인 오류 트리거', E_USER_ERROR);
new NonExist();

Execute this 스크립트는 다음과 같은 출력을 얻을 수 있습니다.

알림: 정의되지 않은 변수: 40행의 /your/php_demo_file.php에 있는 novar

경고: 41행의 /your/php_demo_file.php에서 0으로 나누기

치명적인 오류: 트리거 /your/php_demo_file.php의 42행에 치명적인 오류

마지막 "new NoExistClass()" 예외가 사용자 정의 오류 처리 함수에 의해 포착되지 않은 것을 볼 수 있습니다.

마지막으로 set_Exception_handler는 웹 애플리케이션에서 최상위 예외 처리를 등록한 다음 균일하게 오류 처리 페이지로 이동할 수 있습니다.

위 내용은 PHP 사용자 정의 오류 처리 사례입니다. 모두에게 도움이 되기를 바랍니다.

관련 추천 :

배열 비교 기능을 구현한 PHP 커스텀 함수 사례

PHP 커스텀/시스템/클래스 상수 코드 예제에 대한 자세한 설명

PHP 커스텀/시스템/클래스 상수 코드 예제에 대한 자세한 설명

위 내용은 PHP 사용자 정의 오류 처리의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.