[PHP] Fatal 및 Notice, Warnig 에러 메시지 처리하는 방법


Study/PHP  2019. 9. 17. 09:00

안녕하세요. 명월입니다.


이 글은 PHP에서 Fatal 및 Notice, Warnig 에러 메시지 처리하는 방법에 대한 글입니다.


PHP개발을 하다보면 아래와 같은 에러 메시지가 나올때가 있습니다.

<?php
  $data = 1/0;
?>
<!DOCTYPE html>
<html>
<head>
  <title>title</title>
</head>
<body>
  <?=$data1?>
</body>
</html>

위와 같은 에러는 제가 0으로 나온 에러메시지와 선언하지 않은 $data1변수를 출력하려다 보니 나오는 에러 메시지 입니다. (아래의 이미지는 xDebug설치시 나오는 에러입니다.)

링크 - PHP에서 xDebug 설치 방법


이게 에러 메시지이니 화면에 나오는 게 당연합니다만, 만약 product의 경우면 에러의 세부정보가 나오는 것은 안됩니다. 제가 강제로 에러를 만들었지만 에러가 아닌 Notice 메시지가 나오는 것도 곤란합니다.

이 메시지를 화면상에 나오지 않게 하는 방법입니다.


php.ini에서 설정하는 방법

먼저 php.ini를 가면 error_reporting의 영역이 있고 E_ALL로 선택이 되어있습니다. 이 뜻은 모든 메시지를 표시하는 설정입니다.

그에 대한 설정에 대한 글이 친절하게 영어로 적혀있네요.

; E_ALL             - 모든 메시지와 경고
; E_ERROR           - 치명적인 에러
; E_RECOVERABLE_ERROR  - 거의 모든 에러
; E_WARNING         - 경고
; E_PARSE           - 컴파일 단위의 에러..이건 아마 함수 상에서 발생하는 에러일 듯싶네요.
; E_NOTICE          - notice 레벨 메시지
; E_STRICT          - notice 레벨 메시지(위 메시지와 정확한 차이를 모르겠네요. 버전 차이에 오는 메시지라는데.. 구 버전에서 사용하지만 현 버전에서는 다르게 사용하는 알람인가?)
; E_CORE_ERROR      - PHP 기동 에러
; E_CORE_WARNING    - PHP 기동 경고
; E_COMPILE_ERROR   - 컴파일 단위의 에러
; E_COMPILE_WARNING - 컴파일 단위의 에러
; E_USER_ERROR      - 유저 생성 에러 메시지
; E_USER_WARNING    - 유저 생성 경고 메시지
; E_USER_NOTICE     - 유저 생성 알람 메시지
; E_DEPRECATED      - 현 버전에서는 사용되지 않는 함수
; E_USER_DEPRECATED - 유저 생성 사용하지 않는 메시지

여기서 모든 메시지를 표시하지 않게 하려면 0를 넣으면 됩니다.

이 표시는 production에서 사용하고 개발 환경에서 이렇게 하면 에러를 확인할 수 없기 때문에 Notice만 제거합니다.

「E_ALL & ~E_NOTICE」이렇게 하면 모든 표시하고 E_NOTICE만 표시하지 않는다는 표현이 됩니다.

php 페이지에서 설정하는 방법

페이지 상단에 error_reporting 함수를 이용해서 설정할 수 있습니다.

<?php
  error_reporting(E_ALL&~E_WARNING);
  $data = 1/0;
?>
<!DOCTYPE html>
<html>
<head>
  <title>title</title>
</head>
<body>
  <?=$data1?>
</body>
</html>

여기까지 PHP에서 Fatal 및 Notice, Warnig 에러 메시지 처리하는 방법에 대한 설명이었습니다.


궁금한 점이나 잘못된 점이 있으면 댓글 부탁드립니다.