[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 함수 설명을 보세요.

👇 카테고리 글 목록

대표글

“[PHP]에러 메시지 출력이 안 되게 돼 있을 때 – 1.에러 설정 강제 변환 2.커스텀 에러 핸들러”에 대한 7개의 응답

  1. 고급적인(?) 부분이네요.

    그냥 쉬운 방법도 있는데.. (이미 아시는 부분인데 뒷북일지도 모르겠네요.)

    error_reporting(E_ALL);

    위 코드를 쓰시면 걍 모든 에러 다 나옵니다(서버 설정보다 우선됨).

    http://www.php.net/manual/en/function.error-reporting.php

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

  2. 음.. 혹시 아래 코드로도 해보시겠어요?

    뭔가 서버쪽에서 조작을 해둔 걸까요??

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

  3. 네, 저야 포스팅되면 영광이죠. 언제든지 하셔도 됩니다.

    저도 뭐 메뉴얼 보고; 댓글단 것이라서 ㅎㅎㅎ

    http://www.php.net/manual/en/errorfunc.configuration.php#ini.error-reporting

    보통 에러 메시지 출력은 error_reporting 과 display_errors 라는 두가지 변수로 조작하는 것 같네요.

    뭐 세세한 설정 값들도 엄청 많은 것 같지만..

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

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

댓글 남기기