PHP 프로그램을 디버깅 하려면 다음의 함수를 가지는 "debug2.inc"이란 화일을 만들어라 :
<?php /* 이중으로 선언되는 것을 방지하기 위한 변수정의 */ if (!defined("_DEBUG2_DEFINED_")) { define("_DEBUG2_DEFINED_", 1 ); } else return; // 만약 이화일이 include 됐다면 리턴 # file name : debug2.inc # PHP 소스 코드를 디버깅하기 위한 함수들 #***************************************************************** # Copyright policy is GNU/GPL but additional request is # that you include author's name and email on all copies # Author : Al Dev Email: alavoor@yahoo.com #***************************************************************** # Usage of this functions - # In your source code put something like - # debug2_(__FILE__, __LINE__, "f_somevariable", $f_somevariable); # And this will generate output in debug.out file. //function debug2_($fname, $lname, $debug_var, $debug_value=0) {} // Give read, exec for all on directory /debug2_logs // chmod a+rwx /debug2_logs // But here you need to open the file in append mode. $fp_debug2 = fopen("/debug2_logs/debug.out", "a"); if ($fp_debug2 == false) { print "<b>File open failed - global.var.inc<b>"; exit; } function debug2_($fname, $lname, $debug_var, $debug_value=0) { global $fp_debug2; //print "<br> debug_value is : $debug_value <br>"; if (!$debug_value) { fwrite($fp_debug2, "\n ". $fname ." ". $lname .": $debug_var"); } else { fwrite($fp_debug2, "\n ". $fname . " ". $lname .": $debug_var = $debug_value"); } //print "<br> f_cookie is : $f_cookie <br>"; } // In your first page, which is generally index.php3 // truncate the debug2_logs file in beginning of code function init_debug_file() { global $fp_debug2; $fp_debug2 = fopen("/debug2_logs/debug.out", "w"); if ($fp_debug2 == false) { print "<b>File open failed - global.var.inc<b>"; exit; } system("chmod a+rwx /debug2_logs/debug.out"); } ?>
보통 index.php3로 되는 시작페이지의 PHP 소스코드에 다음을 집어넣어라.
<?php include ("debug2.inc"); init_debug_file(); // 다른 명령은 여기에..... // ........... ?>
디버깅 값을 얻기위해 PHP 소스코드 파일에 debug2_() 란 호출을 아래와 같이 넣어라
<?php include ("debug2.inc"); debug2_(__FILE__, __LINE__, "f_somevariable", $f_somevariable); function aa() { $aa = 8; debug2_(__FILE__, __LINE__, "aa", $aa); } ?>
PHP 프로그램을 실행하게 되면, 결과가 debug.out 이란 화일에 파일이름, 라인번호, 변수명 과 변수값이 나타난다.
일번적으로 debug2_()를 사용하라. 프로그램에서 debug2_()의 호출은 최종결과 코드에 어떠한 영향도 주지않으며 실행에도 아무런 영향을 주지않는다. 왜냐하면 아래에 기술한것 같이 필터링 되기 때문이다. debug2_()를 타이핑하는 시간을 줄이기 위해 복사(copy)와 붙여넣기(paste)를 사용할수 있다. 또한 Vi 에디터의 'yank to buffer' 기능을 이용해서 복사하라.
개발이 완료되면 테스트하고 서버에 올린 준비가 됐으면 소스코드에서 debug2_ 호출을 필터링 하라. 유닉스 프롬프트에서 -
bash$ mkdir production bash$ grep -v debug2_ filea.php3 > production/filea.php3
bash$ mkdir production bash$ ls *.php3 | while read ans do grep -v debug2_ $ans > production/$ans done