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 큐브리드용 그누보드(GNUBOARD)4 공개 file 한마루 2007.02.26 1560625
61 CUBRID 2008 NBD Bench 시험 결과 보고서 file admin 2008.12.09 45688
60 APMSETUP 6: Apache+PHP+CUBRID를 한번의 실행으로...... 정병주 2009.06.02 39155
59 큐브리드용 그누보드 4.21.0 1 file 한마루 2007.06.22 38481
58 Windows 기반의 Apache + PHP + CUBRID를 한방에... APMSETUP 7 출시 정병주 2010.01.05 34900
57 게시판 기능을 통해 본 오픈소스 DBMS 비교 admin 2009.06.27 33090
56 HDD vs. SSD에서의 DBMS (CUBRID, MySQL) 성능 비교 자료 file 정병주 2010.08.26 32913
55 NHN DeView 2008 발표자료 정병주 2008.12.07 32674
54 NHN DeView 2008 동영상 정병주 2008.12.07 31547
53 JDBC sample 프로그램입니다 관리자 2007.10.25 30808
52 울트라에디트 사용자를 위한 CUBRID 함수 구문강조 파일 file 시난 2009.07.03 30452
51 WordPress for CUBRID 2008 1 file 정병주 2009.08.06 29734
50 알지보드 4.1.0 베타 다운로드 정병주 2009.06.03 27406
49 그누보드 4.31.08 (CUBRID) 공개 시난 2009.07.01 27240
48 소프트웨어 개발 프로세스 자료들... file 관리자 2007.01.17 26814
47 NBench를 이용하여 게시판 Benchmark 해보기 정병주 2009.01.07 26479
46 Autoset 4.3.2 Prototype 2009.03.11 25545
45 CUBRID 지원 텍스트큐브(Textcube) 다운로드 3 file 정병주 2009.07.01 25028
44 CUBRID 매니저 아이콘 디자인 자료 정병주 2009.05.15 24653
43 php로 cubrid 프로시저 사용하기 2 - cubrid_prepare 이용 - 박진호 2007.10.30 24117
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