41<script language=
"JavaScript">
43 function dBug_toggleRow(source) {
44 target=(document.all) ? source.parentElement.cells[1] : source.parentNode.lastChild
45 dBug_toggleTarget(target,dBug_toggleSource(source));
48 function dBug_toggleSource(source) {
49 if (source.style.fontStyle==
'italic') {
50 source.style.fontStyle=
'normal';
51 source.title=
'click to collapse';
54 source.style.fontStyle=
'italic';
55 source.title=
'click to expand';
60 function dBug_toggleTarget(target,switchToState) {
61 target.style.display=(switchToState==
'open') ?
'' :
'none';
64 function dBug_toggleTable(source) {
65 var switchToState=dBug_toggleSource(source);
67 var table=source.parentElement.parentElement;
68 for(var i=1;i<table.rows.length;i++) {
70 dBug_toggleTarget(target,switchToState);
74 var table=source.parentNode.parentNode;
75 for (var i=1;i<table.childNodes.length;i++) {
76 target=table.childNodes[i];
78 dBug_toggleTarget(target,switchToState);
85<style type=
"text/css">
86 table.dBug_array,table.dBug_object,table.dBug_resource,table.dBug_resourceC,table.dBug_xml {
87 font-family:Verdana, Arial, Helvetica, sans-serif; color:#000000; font-size:12px;
93 .dBug_resourceCHeader,
95 { font-weight:bold; color:#FFFFFF; }
98 table.dBug_array { background-color:#006600; }
99 table.dBug_array td { background-color:#FFFFFF; }
100 table.dBug_array td.dBug_arrayHeader { background-color:#009900; }
101 table.dBug_array td.dBug_arrayKey { background-color:#CCFFCC; }
104 table.dBug_object { background-color:#0000CC; }
105 table.dBug_object td { background-color:#FFFFFF; }
106 table.dBug_object td.dBug_objectHeader { background-color:#4444CC; }
107 table.dBug_object td.dBug_objectKey { background-color:#CCDDFF; }
110 table.dBug_resourceC { background-color:#884488; }
111 table.dBug_resourceC td { background-color:#FFFFFF; }
112 table.dBug_resourceC td.dBug_resourceCHeader { background-color:#AA66AA; }
113 table.dBug_resourceC td.dBug_resourceCKey { background-color:#FFDDFF; }
116 table.dBug_resource { background-color:#884488; }
117 table.dBug_resource td { background-color:#FFFFFF; }
118 table.dBug_resource td.dBug_resourceHeader { background-color:#AA66AA; }
119 table.dBug_resource td.dBug_resourceKey { background-color:#FFDDFF; }
122 table.dBug_xml { background-color:#888888; }
123 table.dBug_xml td { background-color:#FFFFFF; }
124 table.dBug_xml td.dBug_xmlHeader { background-color:#AAAAAA; }
125 table.dBug_xml td.dBug_xmlKey { background-color:#DDDDDD; }
138 var
$arrType=array(
"array",
"object",
"resource",
"boolean");
141 function dBug($var,$forceType=
"") {
142 $arrAccept=array(
"array",
"object",
"xml");
143 if(in_array($forceType,$arrAccept))
144 $this->{
"varIs".ucfirst($forceType)}($var);
151 echo
"<table cellspacing=2 cellpadding=3 class=\"dBug_".$type.
"\">
153 <td class=\"dBug_".$type.
"Header\" colspan=".$colspan.
" style=\"cursor:hand\" onClick='dBug_toggleTable(this)'>".$header.
"</td>
160 <td valign=\"top\" onClick='dBug_toggleRow(this)' style=\"cursor:hand\" class=\"dBug_".$type.
"Key\">".$header.
"</td>
166 return "</td>\n</tr>\n";
171 $error=
"Error: Variable is not a";
174 if(in_array(substr($type,0,1),array(
"a",
"e",
"i",
"o",
"u",
"x")))
176 return ($error.
" ".$type.
" type");
181 switch(gettype($var)) {
195 $var=($var==
"") ?
"[empty string]" : $var;
197 $additional = ($var ==
"[empty string]") ?
'' :
' ('. gettype($var) .
', length: ' . strlen($var) .
')';
199 echo
"<table cellspacing=1 class='dBug_array'><tr>\n<td class='dBug_arrayKey'>\n<pre>".$var.
"</pre></td>\n<td>\n". $additional .
"</td>\n</tr>\n</table>\n";
208 $var=($var==1) ?
"TRUE" :
"FALSE";
216 foreach($var as $key=>$value) {
218 if(in_array(gettype($value),$this->arrType))
221 $value=(trim($value)==
"") ?
"[empty string]" : $value;
222 $additional = ($value ==
"[empty string]") ?
'' :
' ('. gettype($value) .
', length: ' . strlen($value) .
')';
224 echo $value.
"</td>\n<td>\n ". $additional .
"</td>\n</tr>\n";
228 else echo
"<tr><td>".$this->error(
"array").$this->closeTDRow();
235 $arrObjVars=get_object_vars($var);
236 if(is_object($var)) {
237 foreach($arrObjVars as $key=>$value) {
238 $value=(trim($value)==
"") ?
"[empty string]" : $value;
240 $additional = ($value ==
"[empty string]") ?
'' :
' ('. gettype($value) .
', length: ' . strlen($value) .
')';
243 if(in_array(gettype($value),$this->arrType))
245 else echo $value . $additional .$this->closeTDRow();
247 $arrObjMethods=get_class_methods(get_class($var));
248 foreach($arrObjMethods as $key=>$value) {
250 echo
"[method]".$this->closeTDRow();
253 else echo
"<tr><td>".$this->error(
"object").$this->closeTDRow();
259 $this->
makeTableHeader(
"resourceC",
"resource of type ".get_resource_type($var),1);
261 switch(get_resource_type($var)) {
266 case "sybase-db result":
267 case "sybase-ct result":
269 $db=current(explode(
" ",get_resource_type($var)));
279 echo get_resource_type($var).$this->closeTDRow();
292 $xml_parser=xml_parser_create();
293 xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0);
294 xml_set_element_handler($xml_parser,array(&$this,
"xmlStartElement"),array(&$this,
"xmlEndElement"));
295 xml_set_character_data_handler($xml_parser,array(&$this,
"xmlCharacterData"));
296 xml_set_default_handler($xml_parser,array(&$this,
"xmlDefaultHandler"));
302 $bFile=(!($fp=@fopen($var,
"r"))) ? false :
true;
306 while($data=str_replace(
"\n",
"",fread($fp,4096)))
307 $this->
xmlParse($xml_parser,$data,feof($fp));
311 if(!is_string($var)) {
312 echo $this->
error(
"xml").$this->closeTDRow().
"</table>\n";
316 $this->
xmlParse($xml_parser,$data,1);
325 if (!xml_parse($xml_parser,$data,$bFinal)) {
326 die(sprintf(
"XML error: %s at line %d\n",
327 xml_error_string(xml_get_error_code($xml_parser)),
328 xml_get_current_line_number($xml_parser)));
336 $this->xmlSData[
$this->xmlCount]=
'$this->makeTableHeader("xml","xml element",2);';
337 $this->xmlSData[
$this->xmlCount].=
'$this->makeTDHeader("xml","xmlName");';
339 $this->xmlSData[
$this->xmlCount].=
'$this->makeTDHeader("xml","xmlAttributes");';
340 if(count($attribs)>0)
341 $this->xmlSData[
$this->xmlCount].=
'$this->varIsArray($this->xmlAttrib['.$this->xmlCount.
']);';
351 eval($this->xmlSData[$i]);
353 echo (!empty($this->xmlCData[$i])) ? $this->xmlCData[$i] :
" ";
356 echo (!empty($this->xmlDData[$i])) ? $this->xmlDData[$i] :
" ";
359 unset($this->xmlCData[$i],$this->xmlDData[$i]);
368 $count=$this->xmlCount-1;
369 if(!empty($this->xmlCData[$count]))
370 $this->xmlCData[$count].=$data;
372 $this->xmlCData[$count]=$data;
378 $data=str_replace(array(
"<!--",
"-->"),
"",htmlspecialchars($data));
379 $count=$this->xmlCount-1;
380 if(!empty($this->xmlDData[$count]))
381 $this->xmlDData[$count].=$data;
383 $this->xmlDData[$count]=$data;
388 $numrows=call_user_func($db.
"_num_rows",$var);
389 $numfields=call_user_func($db.
"_num_fields",$var);
391 echo
"<tr><td class=\"dBug_resourceKey\"> </td>";
392 for($i=0;$i<$numfields;$i++) {
393 $field[$i]=call_user_func($db.
"_fetch_field",$var,$i);
394 echo
"<td class=\"dBug_resourceKey\">".$field[$i]->name.
"</td>";
397 for($i=0;$i<$numrows;$i++) {
398 $row=call_user_func($db.
"_fetch_array",$var,constant(strtoupper($db).
"_ASSOC"));
400 echo
"<td class=\"dBug_resourceKey\">".($i+1).
"</td>";
401 for($k=0;$k<$numfields;$k++) {
402 $tempField=$field[$k]->name;
403 $fieldrow=$row[($field[$k]->name)];
404 $fieldrow=($fieldrow==
"") ?
"[empty string]" : $fieldrow;
405 echo
"<td>".$fieldrow.
"</td>\n";
411 call_user_func($db.
"_data_seek",$var,0);
418 echo imagesx($var).$this->closeTDRow();
420 echo imagesy($var).$this->closeTDRow();
422 echo imagecolorstotal($var).$this->closeTDRow();
makeTableHeader($type, $header, $colspan=2)
xmlEndElement($parser, $name)
makeTDHeader($type, $header)
xmlCharacterData($parser, $data)
xmlParse($xml_parser, $data, $bFinal)
xmlStartElement($parser, $name, $attribs)
dBug($var, $forceType="")
xmlDefaultHandler($parser, $data)
varIsDBResource($var, $db="mysql")