Background Image
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 수정 삭제
서버 쪽에서 복잡한 과정을 거쳐 작업이 이루어 지거나
(DB를 호출하는 로직등등)

또는, 여러가지 오류검사나 정합성 검증이 필요한 경우에는
대부분 별도로 오류 처리하는 함수를 두게 된다.

그런데 이 함수를 호출하는 곳이 여러 군데 라면
어떤 값을 거쳐서 이 오류상황에 도달하게 되었는지가 프로그램을 고치는데,
또는 상황을 파악해서 문제를 해결하는데 중요한 정보가 된다.

이런 경우 var_dump와 debug_backtrace 또는 debug_print_backtrace함수를 적절히 활용하면
훌륭한 디버깅 환경을 갖출 수 있다.

다음은 그 샘플 코드로 backtrace()는 php.net에 올라와 있는 코드이고
ana_failmail은 backtrace()를 활용하여 오류가 발생한 경우 담당자에게
메일을 발송하도록 한것이다.
($failmail_sender, $failmail_receiver만 미리 설정해 두면된다)



    function backtrace()
    {
        $output = "<div style=''''text-align: left;''''>\n";
        $output .= "<b>Backtrace:</b><br />\n";
        $backtrace = debug_backtrace();
    
        foreach ($backtrace as $bt) {
            $args = '''''''';
            foreach ($bt[''''args''''] as $a) {
                if (!empty($args)) {
                    $args .= '''', '''';
                }
                switch (gettype($a)) {
                case ''''integer'''':
                case ''''double'''':
                    $args .= $a;
                    break;
                case ''''string'''':
                    $a = htmlspecialchars(substr($a, 0, 64)).((strlen($a) > 64) ? ''''...'''' : '''''''');
                    $args .= "\"$a\"";
                    break;
                case ''''array'''':
                    $args .= ''''Array(''''.count($a).'''')'''';
                    break;
                case ''''object'''':
                    $args .= ''''Object(''''.get_class($a).'''')'''';
                    break;
                case ''''resource'''':
                    $args .= ''''Resource(''''.strstr($a, ''''#'''').'''')'''';
                    break;
                case ''''boolean'''':
                    $args .= $a ? ''''True'''' : ''''False'''';
                    break;
                case ''''NULL'''':
                    $args .= ''''Null'''';
                    break;
                default:
                    $args .= ''''Unknown'''';
                }
            }
            $output .= "<br />\n";
            $output .= "<b>file:</b> {$bt[''''line'''']} - {$bt[''''file'''']}<br />\n";
            $output .= "<b>call:</b> {$bt[''''class'''']}{$bt[''''type'''']}{$bt[''''function'''']}($args)<br />\n";
        }
        $output .= "</div>\n";
        return $output;
    }
    
    function ana_failmail($msg)
    {
      global $PHP_SELF, $failmail_sender, $failmail_receiver;
      
      $title = "process fail($PHP_SELF)";
    
      echo "$msg<br>\n";
      ini_set("SMTP","메일서버 이름이나 주소를입력"); // 메일 서버가 설정되어 있다면 필요 없음
      $mheader="MIME-Version: 1.0\r\nContent-type: text/html;\r\nFrom: $failmail_sender\r\n";

      if (mail($failmail_receiver, $title, $msg."<br>\n".backtrace(), $mheader))
        echo "메일 전송 성공";
      else      
        echo "메일 전송 실패";
    }



List of Articles
번호 제목 글쓴이 날짜 조회 수
62 공개SW 가이드/보고서 정병주 2020.06.09 540
61 오픈소스 라이선스 해설 자료(Version 1.0.0) 정병주 2017.09.18 598
60 오픈소스 소프트웨어 라이선스 가이드 1.0 - 초급편 정병주 2017.09.18 679
59 오픈소스 소프트웨어 라이선스 가이드 2.0 - 중급편 정병주 2017.09.18 693
58 공개SW 연구개발 수행 가이드라인 file 정병주 2018.04.27 732
57 공개SW 라이선스 가이드 정병주 2017.12.20 815
56 Pro Git (Second Edition) 한글 번역본 다운로드 file 정병주 2017.09.18 1156
55 네이버가 만든 오픈소스 가이드 정병주 2017.09.18 1548
54 국가정보자원관리원 G-클라우드 소개자료 정병주 2017.12.26 2682
53 ITrack 모범 사용(best practice) 문서 1 file 관리자 2006.09.07 13517
52 ITrack 설명서 file 관리자 2006.09.07 14511
51 [util] procedure 등록 유틸리티 1 file 이지현 2007.10.19 15417
50 Linux에서 Cubrid 자동 부팅하기 장현정 2007.10.25 15470
49 큐브리드 7.0 : cci c 파일 델파이 포팅자료 - 베타1 2 file 나비스 2007.05.31 16395
48 ITrack KLDP에 공개SW 프로젝트로 등록 2 김평철 2006.09.12 16419
47 phpCubAdmin for 2008버전 CUBRID_DEV 2009.07.15 16594
46 APC_Install-tools 1.4 2 Prototype 2009.03.13 16864
45 ITrack SW 다운로드 1 file 관리자 2006.09.07 17052
44 JCO 8차 컨퍼런스 발표 자료 (개발프로세스) file 김평철 2007.02.12 17389
43 Microsoft VisualC++ 2008 재배포 팩 (SP1) 32bit file 남재우 2010.01.27 17707
Board Pagination Prev 1 2 3 4 Next
/ 4

Contact Cubrid

대표전화 070-4077-2110 / 기술문의 070-4077-2113 / 영업문의 070-4077-2112 / Email. contact_at_cubrid.com
Contact Sales