{"varIs".ucfirst($forceType)}($var); else $this->checkType($var); } //create the main table header function makeTableHeader($type,$header,$colspan=2) { echo ""; } //create the table row header function makeTDHeader($type,$header) { echo "\n\n"; } //error function error($type) { $error="Error: Variable is not a"; //thought it would be nice to place in some nice grammar techniques :) // this just checks if the type starts with a vowel or "x" and displays either "a" or "an" if(in_array(substr($type,0,1),array("a","e","i","o","u","x"))) $error.="n"; return ($error." ".$type." type"); } //check variable type function checkType($var) { switch(gettype($var)) { case "resource": $this->varIsResource($var); break; case "object": $this->varIsObject($var); break; case "array": $this->varIsArray($var); break; case "boolean": $this->varIsBoolean($var); break; default: $var=($var=="") ? "[empty string]" : $var; echo "
".$header."
".$header." "; } //close table row function closeTDRow() { return "
\n\n\n
".$var."
\n"; break; } } //if variable is a boolean type function varIsBoolean($var) { $var=($var==1) ? "TRUE" : "FALSE"; echo $var; } //if variable is an array type function varIsArray($var) { $this->makeTableHeader("array","array"); if(is_array($var)) { foreach($var as $key=>$value) { $this->makeTDHeader("array",$key); if(in_array(gettype($value),$this->arrType)) $this->checkType($value); else { $value=(trim($value)=="") ? "[empty string]" : $value; echo $value."\n\n"; } } } else echo "".$this->error("array").$this->closeTDRow(); echo ""; } //if variable is an object type function varIsObject($var) { $this->makeTableHeader("object","object"); $arrObjVars=get_object_vars($var); if(is_object($var)) { foreach($arrObjVars as $key=>$value) { // $value=(trim($value)=="") ? "[empty string]" : $value; $value=is_string($value) ? trim($value) : $value; $value=empty($value) ? "[empty string]" : $value; $this->makeTDHeader("object",$key); if(in_array(gettype($value),$this->arrType)) $this->checkType($value); else echo $value.$this->closeTDRow(); } $arrObjMethods=get_class_methods(get_class($var)); foreach($arrObjMethods as $key=>$value) { $this->makeTDHeader("object",$value); echo "[function]".$this->closeTDRow(); } } else echo "".$this->error("object").$this->closeTDRow(); echo ""; } //if variable is a resource type function varIsResource($var) { $this->makeTableHeader("resourceC","resource",1); echo "\n\n"; switch(get_resource_type($var)) { case "fbsql result": case "mssql result": case "msql query": case "pgsql result": case "sybase-db result": case "sybase-ct result": case "mysql result": $db=current(explode(" ",get_resource_type($var))); $this->varIsDBResource($var,$db); break; case "gd": $this->varIsGDResource($var); break; case "xml": $this->varIsXmlResource($var); break; default: echo get_resource_type($var).$this->closeTDRow(); break; } echo $this->closeTDRow()."\n"; } //if variable is an xml type function varIsXml($var) { $this->varIsXmlResource($var); } //if variable is an xml resource type function varIsXmlResource($var) { $xml_parser=xml_parser_create(); xml_parser_set_option($xml_parser,XML_OPTION_CASE_FOLDING,0); xml_set_element_handler($xml_parser,array(&$this,"xmlStartElement"),array(&$this,"xmlEndElement")); xml_set_character_data_handler($xml_parser,array(&$this,"xmlCharacterData")); xml_set_default_handler($xml_parser,array(&$this,"xmlDefaultHandler")); $this->makeTableHeader("xml","xml document",2); $this->makeTDHeader("xml","xmlRoot"); //attempt to open xml file $bFile=(!($fp=@fopen($var,"r"))) ? false : true; //read xml file if($bFile) { while($data=str_replace("\n","",fread($fp,4096))) $this->xmlParse($xml_parser,$data,feof($fp)); } //if xml is not a file, attempt to read it as a string else { if(!is_string($var)) { echo $this->error("xml").$this->closeTDRow()."\n"; return; } $data=$var; $this->xmlParse($xml_parser,$data,1); } echo $this->closeTDRow()."\n"; } //parse xml function xmlParse($xml_parser,$data,$bFinal) { if (!xml_parse($xml_parser,$data,$bFinal)) { die(sprintf("XML error: %s at line %d\n", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } //xml: inititiated when a start tag is encountered function xmlStartElement($parser,$name,$attribs) { $this->xmlAttrib[$this->xmlCount]=$attribs; $this->xmlName[$this->xmlCount]=$name; $this->xmlSData[$this->xmlCount]='$this->makeTableHeader("xml","xml element",2);'; $this->xmlSData[$this->xmlCount].='$this->makeTDHeader("xml","xmlName");'; $this->xmlSData[$this->xmlCount].='echo "'.$this->xmlName[$this->xmlCount].'".$this->closeTDRow();'; $this->xmlSData[$this->xmlCount].='$this->makeTDHeader("xml","xmlAttributes");'; if(count($attribs)>0) $this->xmlSData[$this->xmlCount].='$this->varIsArray($this->xmlAttrib['.$this->xmlCount.']);'; else $this->xmlSData[$this->xmlCount].='echo " ";'; $this->xmlSData[$this->xmlCount].='echo $this->closeTDRow();'; $this->xmlCount++; } //xml: initiated when an end tag is encountered function xmlEndElement($parser,$name) { for($i=0;$i<$this->xmlCount;$i++) { eval($this->xmlSData[$i]); $this->makeTDHeader("xml","xmlText"); echo (!empty($this->xmlCData[$i])) ? $this->xmlCData[$i] : " "; echo $this->closeTDRow(); $this->makeTDHeader("xml","xmlComment"); echo (!empty($this->xmlDData[$i])) ? $this->xmlDData[$i] : " "; echo $this->closeTDRow(); $this->makeTDHeader("xml","xmlChildren"); unset($this->xmlCData[$i],$this->xmlDData[$i]); } echo $this->closeTDRow(); echo ""; $this->xmlCount=0; } //xml: initiated when text between tags is encountered function xmlCharacterData($parser,$data) { $count=$this->xmlCount-1; if(!empty($this->xmlCData[$count])) $this->xmlCData[$count].=$data; else $this->xmlCData[$count]=$data; } //xml: initiated when a comment or other miscellaneous texts is encountered function xmlDefaultHandler($parser,$data) { //strip '' off comments $data=str_replace(array("<!--","-->"),"",htmlspecialchars($data)); $count=$this->xmlCount-1; if(!empty($this->xmlDData[$count])) $this->xmlDData[$count].=$data; else $this->xmlDData[$count]=$data; } //if variable is a database resource type function varIsDBResource($var,$db="mysql") { $numrows=call_user_func($db."_num_rows",$var); $numfields=call_user_func($db."_num_fields",$var); $this->makeTableHeader("resource",$db." result",$numfields+1); echo " "; for($i=0;$i<$numfields;$i++) { $field[$i]=call_user_func($db."_fetch_field",$var,$i); echo "".$field[$i]->name.""; } echo ""; for($i=0;$i<$numrows;$i++) { $row=call_user_func($db."_fetch_array",$var,constant(strtoupper($db)."_ASSOC")); echo "\n"; echo "".($i+1).""; for($k=0;$k<$numfields;$k++) { $tempField=$field[$k]->name; $fieldrow=$row[($field[$k]->name)]; $fieldrow=($fieldrow=="") ? "[empty string]" : $fieldrow; echo "".$fieldrow."\n"; } echo "\n"; } echo ""; if($numrows>0) call_user_func($db."_data_seek",$var,0); } //if variable is an image/gd resource type function varIsGDResource($var) { $this->makeTableHeader("resource","gd",2); $this->makeTDHeader("resource","Width"); echo imagesx($var).$this->closeTDRow(); $this->makeTDHeader("resource","Height"); echo imagesy($var).$this->closeTDRow(); $this->makeTDHeader("resource","Colors"); echo imagecolorstotal($var).$this->closeTDRow(); echo ""; } } ?>