반응형
소개하다.
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( )
}
반응형
'개발 꿀팁 > PHP' 카테고리의 다른 글
PHP 패키지 이상 클래스, 등록 오류 및 이상 처리 메커니즘 (0) | 2022.11.02 |
---|---|
php redis 연결 끊기 (0) | 2022.11.02 |
php가 같은 id를 병합 (0) | 2022.11.02 |
php는 2차원 배열에 중복된 id가 있는지 여부를 판단한다 (0) | 2022.11.02 |
php에서 HTTP 요청 코드 시작 (0) | 2022.11.02 |