MIOLO20
Carregando...
Procurando...
Nenhuma entrada encontrada
dbug.class
Ir para a documentação deste ficheiro.
1<?php
2//error_reporting(E_ALL);
3
40?>
41<script language="JavaScript">
42/* code modified from ColdFusion's cfdump code */
43 function dBug_toggleRow(source) {
44 target=(document.all) ? source.parentElement.cells[1] : source.parentNode.lastChild
45 dBug_toggleTarget(target,dBug_toggleSource(source));
46 }
47
48 function dBug_toggleSource(source) {
49 if (source.style.fontStyle=='italic') {
50 source.style.fontStyle='normal';
51 source.title='click to collapse';
52 return 'open';
53 } else {
54 source.style.fontStyle='italic';
55 source.title='click to expand';
56 return 'closed';
57 }
58 }
59
60 function dBug_toggleTarget(target,switchToState) {
61 target.style.display=(switchToState=='open') ? '' : 'none';
62 }
63
64 function dBug_toggleTable(source) {
65 var switchToState=dBug_toggleSource(source);
66 if(document.all) {
67 var table=source.parentElement.parentElement;
68 for(var i=1;i<table.rows.length;i++) {
69 target=table.rows[i];
70 dBug_toggleTarget(target,switchToState);
71 }
72 }
73 else {
74 var table=source.parentNode.parentNode;
75 for (var i=1;i<table.childNodes.length;i++) {
76 target=table.childNodes[i];
77 if(target.style) {
78 dBug_toggleTarget(target,switchToState);
79 }
80 }
81 }
82 }
83</script>
84
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;
88 }
89
90 .dBug_arrayHeader,
91 .dBug_objectHeader,
92 .dBug_resourceHeader,
93 .dBug_resourceCHeader,
94 .dBug_xmlHeader
95 { font-weight:bold; color:#FFFFFF; }
96
97 /* array */
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; }
102
103 /* object */
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; }
108
109 /* resource */
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; }
114
115 /* resource */
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; }
120
121 /* xml */
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; }
126</style>
127
128<?php
129class dBug {
130
131 var $xmlDepth=array();
138 var $arrType=array("array","object","resource","boolean");
139
140 //constructor
141 function dBug($var,$forceType="") {
142 $arrAccept=array("array","object","xml"); //array of variable types that can be "forced"
143 if(in_array($forceType,$arrAccept))
144 $this->{"varIs".ucfirst($forceType)}($var);
145 else
146 $this->checkType($var);
147 }
148
149 //create the main table header
150 function makeTableHeader($type,$header,$colspan=2) {
151 echo "<table cellspacing=2 cellpadding=3 class=\"dBug_".$type."\">
152 <tr>
153 <td class=\"dBug_".$type."Header\" colspan=".$colspan." style=\"cursor:hand\" onClick='dBug_toggleTable(this)'>".$header."</td>
154 </tr>";
155 }
156
157 //create the table row header
158 function makeTDHeader($type,$header) {
159 echo "<tr>
160 <td valign=\"top\" onClick='dBug_toggleRow(this)' style=\"cursor:hand\" class=\"dBug_".$type."Key\">".$header."</td>
161 <td>";
162 }
163
164 //close table row
165 function closeTDRow() {
166 return "</td>\n</tr>\n";
167 }
168
169 //error
170 function error($type) {
171 $error="Error: Variable is not a";
172 //thought it would be nice to place in some nice grammar techniques :)
173 // this just checks if the type starts with a vowel or "x" and displays either "a" or "an"
174 if(in_array(substr($type,0,1),array("a","e","i","o","u","x")))
175 $error.="n";
176 return ($error." ".$type." type");
177 }
178
179 //check variable type
180 function checkType($var) {
181 switch(gettype($var)) {
182 case "resource":
183 $this->varIsResource($var);
184 break;
185 case "object":
186 $this->varIsObject($var);
187 break;
188 case "array":
189 $this->varIsArray($var);
190 break;
191 case "boolean":
192 $this->varIsBoolean($var);
193 break;
194 default:
195 $var=($var=="") ? "[empty string]" : $var;
196
197 $additional = ($var == "[empty string]") ? '' : ' ('. gettype($var) . ', length: ' . strlen($var) .')';
198
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";
200 break;
201 }
202 }
203
204 //<pre><font color='#bb00bb'>
205
206 //if variable is a boolean type
207 function varIsBoolean($var) {
208 $var=($var==1) ? "TRUE" : "FALSE";
209 echo $var;
210 }
211
212 //if variable is an array type
213 function varIsArray($var) {
214 $this->makeTableHeader("array","array of size " . count($var));
215 if(is_array($var)) {
216 foreach($var as $key=>$value) {
217 $this->makeTDHeader("array",$key);
218 if(in_array(gettype($value),$this->arrType))
219 $this->checkType($value);
220 else {
221 $value=(trim($value)=="") ? "[empty string]" : $value;
222 $additional = ($value == "[empty string]") ? '' : ' ('. gettype($value) . ', length: ' . strlen($value) .')';
223
224 echo $value."</td>\n<td>\n ". $additional ."</td>\n</tr>\n";
225 }
226 }
227 }
228 else echo "<tr><td>".$this->error("array").$this->closeTDRow();
229 echo "</table>";
230 }
231
232 //if variable is an object type
233 function varIsObject($var) {
234 $this->makeTableHeader("object", "object of type " . get_class($var));
235 $arrObjVars=get_object_vars($var);
236 if(is_object($var)) {
237 foreach($arrObjVars as $key=>$value) {
238 $value=(trim($value)=="") ? "[empty string]" : $value;
239
240 $additional = ($value == "[empty string]") ? '' : ' ('. gettype($value) . ', length: ' . strlen($value) .')';
241
242 $this->makeTDHeader("object",$key);
243 if(in_array(gettype($value),$this->arrType))
244 $this->checkType($value);
245 else echo $value . $additional .$this->closeTDRow();
246 }
247 $arrObjMethods=get_class_methods(get_class($var));
248 foreach($arrObjMethods as $key=>$value) {
249 $this->makeTDHeader("object",$value);
250 echo "[method]".$this->closeTDRow();
251 }
252 }
253 else echo "<tr><td>".$this->error("object").$this->closeTDRow();
254 echo "</table>";
255 }
256
257 //if variable is a resource type
258 function varIsResource($var) {
259 $this->makeTableHeader("resourceC","resource of type ".get_resource_type($var),1);
260 echo "<tr>\n<td>\n";
261 switch(get_resource_type($var)) {
262 case "fbsql result":
263 case "mssql result":
264 case "msql query":
265 case "pgsql result":
266 case "sybase-db result":
267 case "sybase-ct result":
268 case "mysql result":
269 $db=current(explode(" ",get_resource_type($var)));
270 $this->varIsDBResource($var,$db);
271 break;
272 case "gd":
273 $this->varIsGDResource($var);
274 break;
275 case "xml":
276 $this->varIsXmlResource($var);
277 break;
278 default:
279 echo get_resource_type($var).$this->closeTDRow();
280 break;
281 }
282 echo $this->closeTDRow()."</table>\n";
283 }
284
285 //if variable is an xml type
286 function varIsXml($var) {
287 $this->varIsXmlResource($var);
288 }
289
290 //if variable is an xml resource type
291 function varIsXmlResource($var) {
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"));
297
298 $this->makeTableHeader("xml","xml document",2);
299 $this->makeTDHeader("xml","xmlRoot");
300
301 //attempt to open xml file
302 $bFile=(!($fp=@fopen($var,"r"))) ? false : true;
303
304 //read xml file
305 if($bFile) {
306 while($data=str_replace("\n","",fread($fp,4096)))
307 $this->xmlParse($xml_parser,$data,feof($fp));
308 }
309 //if xml is not a file, attempt to read it as a string
310 else {
311 if(!is_string($var)) {
312 echo $this->error("xml").$this->closeTDRow()."</table>\n";
313 return;
314 }
315 $data=$var;
316 $this->xmlParse($xml_parser,$data,1);
317 }
318
319 echo $this->closeTDRow()."</table>\n";
320
321 }
322
323 //parse xml
324 function xmlParse($xml_parser,$data,$bFinal) {
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)));
329 }
330 }
331
332 //xml: inititiated when a start tag is encountered
333 function xmlStartElement($parser,$name,$attribs) {
334 $this->xmlAttrib[$this->xmlCount]=$attribs;
335 $this->xmlName[$this->xmlCount]=$name;
336 $this->xmlSData[$this->xmlCount]='$this->makeTableHeader("xml","xml element",2);';
337 $this->xmlSData[$this->xmlCount].='$this->makeTDHeader("xml","xmlName");';
338 $this->xmlSData[$this->xmlCount].='echo "<strong>'.$this->xmlName[$this->xmlCount].'</strong>".$this->closeTDRow();';
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.']);';
342 else
343 $this->xmlSData[$this->xmlCount].='echo "&nbsp;";';
344 $this->xmlSData[$this->xmlCount].='echo $this->closeTDRow();';
345 $this->xmlCount++;
346 }
347
348 //xml: initiated when an end tag is encountered
349 function xmlEndElement($parser,$name) {
350 for($i=0;$i<$this->xmlCount;$i++) {
351 eval($this->xmlSData[$i]);
352 $this->makeTDHeader("xml","xmlText");
353 echo (!empty($this->xmlCData[$i])) ? $this->xmlCData[$i] : "&nbsp;";
354 echo $this->closeTDRow();
355 $this->makeTDHeader("xml","xmlComment");
356 echo (!empty($this->xmlDData[$i])) ? $this->xmlDData[$i] : "&nbsp;";
357 echo $this->closeTDRow();
358 $this->makeTDHeader("xml","xmlChildren");
359 unset($this->xmlCData[$i],$this->xmlDData[$i]);
360 }
361 echo $this->closeTDRow();
362 echo "</table>";
363 $this->xmlCount=0;
364 }
365
366 //xml: initiated when text between tags is encountered
367 function xmlCharacterData($parser,$data) {
368 $count=$this->xmlCount-1;
369 if(!empty($this->xmlCData[$count]))
370 $this->xmlCData[$count].=$data;
371 else
372 $this->xmlCData[$count]=$data;
373 }
374
375 //xml: initiated when a comment or other miscellaneous texts is encountered
376 function xmlDefaultHandler($parser,$data) {
377 //strip '<!--' and '-->' off comments
378 $data=str_replace(array("&lt;!--","--&gt;"),"",htmlspecialchars($data));
379 $count=$this->xmlCount-1;
380 if(!empty($this->xmlDData[$count]))
381 $this->xmlDData[$count].=$data;
382 else
383 $this->xmlDData[$count]=$data;
384 }
385
386 //if variable is a database resource type
387 function varIsDBResource($var,$db="mysql") {
388 $numrows=call_user_func($db."_num_rows",$var);
389 $numfields=call_user_func($db."_num_fields",$var);
390 $this->makeTableHeader("resource",$db." result",$numfields+1);
391 echo "<tr><td class=\"dBug_resourceKey\">&nbsp;</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>";
395 }
396 echo "</tr>";
397 for($i=0;$i<$numrows;$i++) {
398 $row=call_user_func($db."_fetch_array",$var,constant(strtoupper($db)."_ASSOC"));
399 echo "<tr>\n";
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";
406 }
407 echo "</tr>\n";
408 }
409 echo "</table>";
410 if($numrows>0)
411 call_user_func($db."_data_seek",$var,0);
412 }
413
414 //if variable is an image/gd resource type
415 function varIsGDResource($var) {
416 $this->makeTableHeader("resource","gd",2);
417 $this->makeTDHeader("resource","Width");
418 echo imagesx($var).$this->closeTDRow();
419 $this->makeTDHeader("resource","Height");
420 echo imagesy($var).$this->closeTDRow();
421 $this->makeTDHeader("resource","Colors");
422 echo imagecolorstotal($var).$this->closeTDRow();
423 echo "</table>";
424 }
425}
426?>
Definição dbug.class:129
makeTableHeader($type, $header, $colspan=2)
Definição dbug.class:150
xmlEndElement($parser, $name)
Definição dbug.class:349
makeTDHeader($type, $header)
Definição dbug.class:158
varIsBoolean($var)
Definição dbug.class:207
$xmlAttrib
Definição dbug.class:136
xmlCharacterData($parser, $data)
Definição dbug.class:367
$xmlCData
Definição dbug.class:132
xmlParse($xml_parser, $data, $bFinal)
Definição dbug.class:324
xmlStartElement($parser, $name, $attribs)
Definição dbug.class:333
varIsResource($var)
Definição dbug.class:258
dBug($var, $forceType="")
Definição dbug.class:141
error($type)
Definição dbug.class:170
varIsGDResource($var)
Definição dbug.class:415
varIsXmlResource($var)
Definição dbug.class:291
$xmlCount
Definição dbug.class:135
$xmlName
Definição dbug.class:137
xmlDefaultHandler($parser, $data)
Definição dbug.class:376
$xmlDepth
Definição dbug.class:131
closeTDRow()
Definição dbug.class:165
varIsObject($var)
Definição dbug.class:233
varIsXml($var)
Definição dbug.class:286
checkType($var)
Definição dbug.class:180
varIsArray($var)
Definição dbug.class:213
varIsDBResource($var, $db="mysql")
Definição dbug.class:387
$xmlSData
Definição dbug.class:133
$arrType
Definição dbug.class:138
$xmlDData
Definição dbug.class:134