Skip to Content
Go Back
안형우

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

📌 CSS가 어려운 이유 — 프로젝트 중심 실전 CSS 강의 소개 2023-04-13
📌 워드프레스, 답답한 빌더와 플러그인 대신 시원하게 커스터마징하기(강의) 2023-01-15
📌 아무도 말하지 않는 PHP의 좋은 점 2018-10-13
📌 유지보수하기 쉬운 CSS 전략(슬라이드) 2016-12-20
📌 워드프레스 테마에서 템플릿 파일 매칭 순서 2013-05-12
📌 [번역] CSS 코드 냄새 2013-01-01

[PHP]에러 메시지 출력이 안 되게 돼 있을 때 – 1.에러 설정 강제 변환 2.커스텀 에러 핸들러

웹호스팅 업체에서 PHP의 에러 메시지 출력을 막아둔 경우가 있습니다. 이해할만한 일인데, 보통 사용자들 입장에서는 에러 메시지가 나오는 것보다는 아예 아무 화면도 안 뜨는게 좀더 나아 보이기 때문이죠. 또한, 에러가 실제 콘텐츠에는 영향을 안 끼치는 경우도 있습니다.

include한 파일에 에러가 있는데, include한 파일에서 아무 것도 리턴해 주지 않는 경우를 생각해 봅시다.(조건에 따라 얼마든지 그럴 수 있습니다.) 그런데 include한 파일에 오류가 하나 있다고 칩시다. 그러면 오류를 뿌리지 않는 경우에는 ‘멀쩡한’ 것처럼 나옵니다. 오류를 뿌리는 경우에는 괜시리 화면이 깨져 보이는 것입니다.

당연히 단점도 있습니다. 오류가 있는데 모르는 거죠. 이건 로컬에서 충분히 테스트를 하는 것으로 해결을 해야겠죠.

하지만, 로컬에서는 제대로 돌아가는데 온라인에서는 제대로 돌아가지 않는 경우도 생깁니다. 이럴 때 오류 메시지가 나오지 않으면 답답하기 짝이 없습니다. php.ini를 수정할 수도 없으니 방법이 없다고 생각할 수도 있죠.

하지만 두 가지 방법을 사용해서 에러 메시지를 볼 수 있습니다.

첫 번째 방법은 해당 페이지에서만 php.ini 설정보다 우선한 설정을 적용시키는 것입니다.(이 첫 번째 방법은, 아즈키님의 댓글을 보고 추가한 내용입니다.)

아래 코드를 쓰면 됩니다.

error_reporting(E_ALL); 
ini_set("display_errors", 1); 
//오류 코드 - 없는 변수를 출력하라고
echo $there_is_no;

두 번째 방법은 custom 에러 핸들러를 사용하는 것입니다.

일단 이 링크를 참고하세요 : [PHP 고급] PHP 오류 처리하기

고급이라고 해서 쫄지 마세요. 오류를 보고 싶은 파일의 맨 위에 아래 코드를 추가하면 간단하게 오류를 볼 수 있습니다.

//커스텀 에러 핸들러 함수
function customError($errno, $errstr)
 { 
 echo "<p><strong>Error:</strong> [$errno] $errstr</p>";
 }

//에러 핸들러 세팅
set_error_handler("customError");

참 쉽죠잉?

더 알아보고 싶다면 위에서 링크한 글php.net의 set_error_handler 함수 설명을 보세요.

안녕하세요. 14년차 풀스택 웹개발자 안형우입니다. 이 블로그에서는 WordPress, PHP, CSS, 사용성, 리눅스 서버 등 풀스택 웹개발에서 마주하는 다양한 문제 상황과 해결책, 필요한 개념들을 다룹니다. 👉 소개


작업물

댓글 (7개)

    • 어라라, 그 코드 썼는데도 안 되서 저 코드로 해결한 거였어요 ;;
      혹시나 해서 지금 다시 테스트해 봤는데 안 먹어요. 뭐지;;

    • 와! 이렇게 하니까 되요! ㅋㅋㅋ 완전 감사!!!
      또 한 수 배웠습니다. ini_set도 해 줘야 하는 거군요?!
      이 내용을 포스팅에 포함시켜도 되겠죠? ^^

    • 영어로 된 매뉴얼을 읽는 건 정말 스트레스 받는 일이예요. 필요해서 꾹 참고 하긴 하지만, 좀만 길어지면 눈 돌아가기 십상이죠. ㅋ
      ‘영광’같은 과분한 말씀을;; 여튼 늘 감사합니다! ^^

  • 이렇게 해도 안나옵니다. 왜냐하면 익스플로러9이상부터는 서버 오류메시지보다 브라우저 자체에서 내보내는 HTTP 오류메시지가 먼저 표시되버립니다. 인터넷옵션에서 체크해제해야 제대로보임

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다