.



on-line?
? ?
Ru.Board » » Web- » PHP: ( )

: Cheery

   •

     

hire

Newbie
| | | |


:
 
<?php
/*********************************************************************************************************************\
 *
 * AUTHOR
 * =============
 * Kwaku Otchere  
 * ospinto@hotmail.com
 *  
 * Thanks to Andrew Hewitt (rudebwoy@hotmail.com) for the idea and suggestion
 *  
 * All the credit goes to ColdFusion's brilliant cfdump tag
 * Hope the next version of PHP can implement this or have something similar
 * I love PHP, but var_dump BLOWS!!!
 *
 * FOR DOCUMENTATION AND MORE EXAMPLES: VISIT http://dbug.ospinto.com
 *
 *
 * PURPOSE
 * =============
 * Dumps/Displays the contents of a variable in a colored tabular format
 * Based on the idea, javascript and css code of Macromedia's ColdFusion cfdump tag
 * A much better presentation of a variable's contents than PHP's var_dump and print_r functions
 *
 *
 * USAGE
 * =============
 * new dBug ( variable [,forceType] );
 * example:
 * new dBug ( $myVariable );
 *
 *  
 * if the optional "forceType" string is given, the variable supplied to the  
 * function is forced to have that forceType type.  
 * example: new dBug( $myVariable , "array" );
 * will force $myVariable to be treated and dumped as an array type,  
 * even though it might originally have been a string type, etc.
 *
 * NOTE!
 * ==============
 * forceType is REQUIRED for dumping an xml string or xml file
 * new dBug ( $strXml, "xml" );
 *  
\*********************************************************************************************************************/
 
class dBug {

var $isPhp5= false;
var $traversed= array(); // for PHP5 only
var $xmlDepth= array();
var $xmlCData;
var $xmlSData;
var $xmlDData;
var $xmlCount= 0;
var $xmlAttrib;
var $xmlName;
var $arrType= array("array", "object", "resource", "boolean");

//constructor
function dBug($var,$forceType="") {
$this->isPhp5 = (substr(phpversion(), 0, 1)) === '5';
$arrAccept=array("array","object","xml"); //array of variable types that can be "forced"
if (in_array($forceType,$arrAccept))
$this->{"varIs".ucfirst($forceType)}($var);
else
$this->checkType($var);
}

//create the main table header
function makeTableHeader($type,$header,$colspan=2) {
echo "<table cellspacing=\"2\" cellpadding=\"3\" class=\"dBug_".$type."\">
<tr>
<td class=\"dBug_".$type."Header\" colspan=".$colspan." onClick='dBug_toggleTable(this)'>".$header."</td>
</tr>";
}

//create the table row header
function makeTDHeader($type,$header) {
echo "<tr>
<td valign=\"top\" onClick='dBug_toggleRow(this)' class=\"dBug_".$type."Key\">".$header."</td>
<td>";
}

//close table row
function closeTDRow() {
return "</td>\n</tr>\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:
$this->varIsSimple($var);
//$var=($var=="") ? "[empty string]" : $var;
//echo "<table cellspacing=\"0\"><tr>\n<td>".$var."</td>\n</tr>\n</table>\n";
break;
}
}
//if variable is a simple type
    function varIsSimple($var) {
 
        $this->makeTableHeader("array",gettype($var));
 
        $var = (gettype($var) == "boolean") ? ($var ? "true" : "false" ) : $var;
 
        echo "<tr>\n<td colspan=\"2\">".$this->quoteHtml($var)."</td>\n</tr>\n";
        echo "</table>";
 
    }
     
function quoteHtml( $text ) {
        return nl2br(htmlspecialchars($text));
    }
     
//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."</td>\n</tr>\n";
}
}
}
else echo "<tr><td>".$this->error("array").$this->closeTDRow();
echo "</table>";
}

//if variable is an object type
function varIsObject(&$var) {
   static $objNum = 1;
   $traversed = false;
   if ($this->isPhp5) {
       if (!isset($this->traversed[(string)$var])) {
       $this->traversed[(string)$var] = true;
       } else {
           $traversed =  (string)$var . " (" . get_class($var) . ")";
       }
   } else {
       if (!isset($var->_dBug_Was_Here)) {
           $var->_dBug_Was_Here = $objNum++;
       } else {
           $traversed = get_class($var) . ' #' . $var->_dBug_Was_Here;            
       }
   }
   if ($traversed) {
   echo "link to $traversed";
   return;
   }
if ($this->isPhp5) {
$this->makeTableHeader("object", (string)$var . " (" . get_class( $var ) . ")");
} else {
$this->makeTableHeader("object","object #" . ($objNum - 1) . " (" . get_class( $var ) . ")");
}

if (is_object($var)) {
       $arrObjVars = get_object_vars($var);
       $arrObjMethods = get_class_methods(get_class($var));
foreach ($arrObjVars as $key=>$value) {
$value = &$arrObjVars[$key];
   if ($key=="_dBug_Was_Here")
       continue;
$value=(empty($value)) ? "[empty]" : $value;
$this->makeTDHeader("object",$key);
if (in_array(gettype($value),$this->arrType)) {
$this->checkType($value);
echo $this->closeTDRow();
}
else echo $value.$this->closeTDRow();
}
foreach ($arrObjMethods as $key=>$value) {
$this->makeTDHeader("object",$value);
echo "[function]".$this->closeTDRow();
}
}
else echo "<tr><td>".$this->error("object").$this->closeTDRow();
echo "</table>";
}
 
//if variable is a resource type
function varIsResource($var) {
$this->makeTableHeader("resourceC","resource",1);
echo "<tr>\n<td>\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()."</table>\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()."</table>\n";
return;
}
$data=$var;
$this->xmlParse($xml_parser,$data,1);
}

echo $this->closeTDRow()."</table>\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 "<strong>'.$this->xmlName[$this->xmlCount].'</strong>".$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 "&nbsp;";';
$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] : "&nbsp;";
echo $this->closeTDRow();
$this->makeTDHeader("xml","xmlComment");
echo (!empty($this->xmlDData[$i])) ? $this->xmlDData[$i] : "&nbsp;";
echo $this->closeTDRow();
$this->makeTDHeader("xml","xmlChildren");
unset($this->xmlCData[$i],$this->xmlDData[$i]);
}
echo $this->closeTDRow();
echo "</table>";
$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 '<!--' and '-->' off comments
$data=str_replace(array("&lt;!--","--&gt;"),"",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 "<tr><td class=\"dBug_resourceKey\">&nbsp;</td>";
for($i=0;$i<$numfields;$i++) {
$field[$i]=call_user_func($db."_fetch_field",$var,$i);
echo "<td class=\"dBug_resourceKey\">".$field[$i]->name."</td>";
}
echo "</tr>";
for($i=0;$i<$numrows;$i++) {
$row=call_user_func($db."_fetch_array",$var,constant(strtoupper($db)."_ASSOC"));
echo "<tr>\n";
echo "<td class=\"dBug_resourceKey\">".($i+1)."</td>";  
for($k=0;$k<$numfields;$k++) {
$tempField=$field[$k]->name;
$fieldrow=$row[($field[$k]->name)];
$fieldrow=($fieldrow=="") ? "[empty string]" : $fieldrow;
echo "<td>".$fieldrow."</td>\n";
}
echo "</tr>\n";
}
echo "</table>";
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 "</table>";
}
}
?>
 


: 20 | . 21-08-2006 | : 09:58 25-11-2006 | : hire, 10:11 25-11-2006
     


Ru.Board » » Web- » PHP: ( )


Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.Board
© Ru.Board 2000-2020

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

.ru