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
번호 제목 글쓴이 날짜 조회 수
42 NHN DeView 2010 발표자료 file 정병주 2010.09.10 24035
41 오토셋 서버 4.3.2 버전 - 2009.07.12 리패키징 버전 배포 (큐브리드 다운로더 포함) file 정병주 2009.07.14 22948
40 php로 큐브리드 프로시저 사용하기 1 박진호 2007.10.05 22493
39 큐브리드용 제로보드 및 데이터 마이그레이션 툴 3 file InoS 2006.10.12 21981
38 CUBRID 기반의 오픈소스 툴 사용 가이드 8 file admin 2009.04.18 21499
37 C++빌더 사용자를 위한 CUBRID ADO Connection 샘플 file Prototype 2009.05.03 21147
36 Microsoft VisualC++ 2008 재배포 팩 (SP1) 64bit file 남재우 2010.01.27 20953
35 KIPA "공개SW 유지보수 서비스 가이드라인" 자료 file 정병주 2009.04.29 20550
34 게임개발자들을 위한 CUBRID C-API 관련 자료 및 sample code file 남재우 2007.06.28 20155
» PHP로 DB작업 디버깅하기(오류시 담당자에 디버깅 정보 보내기) 서상욱 2007.06.19 20119
32 CUBRID AppsPack for VM 시난 2009.10.16 20105
31 행정정보데이터베이스 표준화지침 file 권호일 2012.03.31 19742
30 2010 공개SW 신뢰성 Test 결과보고서 file cubrid 2010.12.24 19577
29 CUBRID 소개 및 발전 계획 file cubrid 2010.12.02 19485
28 loadjava GUI Tool 공유 file 궁금이 2007.10.13 19232
27 phpCubAdmin 1.0.1 입니다. file 야라바 2007.10.18 18971
26 사이냅소프트(Synapsoft) 개발체계 정병주 2007.04.13 18542
25 Java SP를 이용한 이기종 DB 연결 file 웁쓰 2009.06.12 18519
24 CCI LIBRARY FOR DELPHI 1 file Prototype 2009.07.01 18412
23 교육 예제입니다. 강사 2007.07.25 18104
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