개발 꿀팁/PHP

php Warning, Notice 오류 캡처

Jammie 2022. 11. 2. 13:47
반응형

소개하다.
php에서 try catch가 Warning, Notice 오류를 캡처하지 못함

해결 방법
1. 에러 처리 함수를 등록하여 글로벌 캡처,
단점, try catch가 바로 포착하여 처리하지 못함

set_error_handler([__CLASS__, 'error']);
set_exception_handler([__CLASS__, 'exception']);
register_shutdown_function([__CLASS__, 'shutdown']);

set_error_handler

일반적으로 캡처: E_NOTICE, E_USER_ERROR, E_USER_WARNING, E_USER_NOTICE

캡처할 수 없음:
E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR and E_COMPILE_WARNING.
일반적으로 trigger_error("...", E_USER_ERROR)와 함께 사용됩니다.

set_exception_handler

try/catch 블록으로 캡처되지 않은 예외에 대한 기본 예외 핸들러를 설정합니다. exception_handler 호출 후 이상이 중지됩니다.
throw new Exception('Uncaught Exception occurred')과 함께 사용됩니다

register_shutdown_function

실행 메커니즘은 php가 호출할 함수를 메모리에 불러오는 것입니다.페이지의 모든 PHP 문 실행이 완료되면 이 함수를 호출합니다.
일반적으로 trigger_error("...", E_USER_ERROR)와 함께 사용됩니다

restore_error_handler() 함수

set_error_handler() 함수에 의해 변경된 restore_error_handler() 함수를 사용하여 이전 오류 핸들러를 정의하고 복구합니다.
이 함수는 항상 true를 반환합니다.
set_error_handler()의 역함수입니다

2. error_get_last로 마지막 오류 가져오기
사용자 정의 오류 trigger_error('flag', E_USER_NOTICE)
notice를 내보낼 수 있는 문장 실행
마지막 오류가 이전에 던져진 것인지 아닌지를 판단하는 것은 앞의 문장이 새로운 오류를 던졌다는 것을 의미한다.
캐치가 포착할 수 있는 이상을 던지다

error_get_last() 함수는 마지막으로 발생한 오류를 얻습니다.

이 함수는 배열의 형태로 마지막에 발생한 오류를 반환합니다.오류가 발생하지 않으면 NULL로 돌아갑니다.

반환된 오류 배열은 4개의 키 이름과 키 값을 포함합니다:

[type] - 오류 유형
[메시지] - 오류 메시지
[file] - 오류가 발생한 파일
[line] - 오류가 발생한 행
문법
error_get_last()

실례
<?php
echo $test;
print_r(error_get_last( ));
?>
위 코드의 출력은 다음과 같습니다.

Array
(
[type] => 8
[메시지] => Undefined variable: test
[file] => C:webfoldertest.php
[라인] => 2
)

예시

try {
@trigger_error('flag', E_USER_NOTICE)
self::$_instance->ping(;
$error = error_get_last(;
if($error['message'] != 'flag')
throw new \Exception('Redis server went away');
} catch (\Exception $e) {
// 끊기고 다시 이어지다.
new self( )
}
반응형