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