Взглянем на функцию, которая упростит задачу добавления в код трассировочной информации:
<?php
//Trace_Debugger.inc //Раздел настройки НАЧАЛО
define("TRACE_DEBUGGING", true); //для отключения отладки присвоить значение false'
$debug_host = "myphpdebug.mydomain.com";
// задать машину, на которой слушает сервер-«шпион»
$debug_port = 23456; // порт, который слушает сервер-«шпион»
//Раздел настройки -- КОНЕЦ
function traceDebug($fileName, $lineNumber, $varName, $varValue) {
if (TRACE_DEBUGGING> {
StraceMessage = "Tracing $fileName at $lineNumber: $varName = $varValue \n";
error_log($traceMessage, 2, "$debug_host:$debug_port"};
>
f
Если поместить эту функцию в обычный включаемый файл, например tra- ce_debugger inc, то можно пользоваться ею, изменяя параметры настройки в начале сценария и включая файл в сценарии программ:
<?php
//Sample_Trace. php
include ("T race_Debugge г. inc");
function swap(&$a, &$b) {
$a = $a + $b; $b = $a - $b; $a = $a - $b;
}
$a = 1234; $b = 4567;
traceDebug(_____ FILE , „LINE___ "a", $a);
echo("a = $a, b = $b"); swap($a, $b);
traceDebug(____ FILE ,___ LINE_ , "a", $a);
echo("a = $a, b = $£>"); ?>
Функция traceDebugO вызывается с передачей в качестве первых двух параметров FILE и LINE . Среда выполнения РНР переводит их в имя файла, из которого она вызывалась, и номер строки соответственно. Третий параметр - имя переменной, которую необходимо трассировать, а четвертый - ее значение.
Для того чтобы отключить трассировку, достаточно присвоить переменной
$trace_debuggingB<|)aiinetrace_debugger. inc значение 0.
phpCodesite
- небольшая вспомогательная библиотека для создания информации выполнения и трассировки переменных. Этот инструмент представляет собою сценарий РНР и может быть взят с http:Jphpcodesite.phpedit. сот/. Рассмотрим пример применения этого средства.
Вот простой сценарий, реализующий стек, и еще один, использующий эту реализацию стека:
<?php
//Stack.php
class Stack • -
{
var $vector; var SstackPointer;
function Stack О {
$this->stackPointe.r = 0; $this->vector = arrayO;
function isEmptyO Iх
{
if ($this->stackPointer <= 0) {
return 1; } else { . : '
return 0;
}
function
{
++$this->stackPointer;
= $element;
}
function pop() {
if ($this->isEmpty()) {
return -1; •
} else {
SpoppedValue = $this->vector[$this->stackPointer];
--$this->stackPointer;