log2file=$var[file]; $this->getVariableName(); if(isset($GLOBALS[DD][logfile])) $this->logfile = $GLOBALS[DD][logfile]; unset($var[file]); if(count($var)==0) $datax = array('$_SESSION' => $_SESSION, '$_POST' => $_POST); else $datax = array($this->varname => $var[0]); $this->logdata = $this->initJSandCSS(); /* if($this->log2file ==1) { if(file_exists($this->logfile)) { $stat = stat($this->logfile); if($stat[size] < $DD[maxlogfilesize]) $cont = file_get_contents($this->logfile); $cont_a=explode('#~#~#~', $cont); $now=mktime(); $this->logdata = $cont_a[0]; for($i=1; $i ($now-7200)) { $this->logdata .= "#~#~#~$cont_a[$i]#~#~#~\n".$cont_a[$i+1]."\n"; } } } else { $this->logdata = $this->initJSandCSS(); } } */ foreach($datax as $i => $d) { $this->bInitialized = false; $this->varname = $i; $this->dBug2($d); } if($this->log2file ==1) { $contents = @file_get_contents($this->logfile); $contents = $this->out . "\n" . $contents; if(substr_count($contents, $this->logdata) ==0) { $contents = $this->logdata . "\n" . $contents; } $fileHandler = @fopen ($this->logfile, "w"); if($fileHandler == false) { echo "

Logfile cannot be written: {$this->logfile}

"; } else { # fwrite ($fileHandler, $this->out."#~#~#~".mktime()."#~#~#~\n".$this->logdata); fwrite ($fileHandler, $contents); fclose ($fileHandler); } } else { //include js and css scripts if($dBugInit == 0) { $dBugInit = 1; $this->out = $this->initJSandCSS() . $this->out; } echo $this->out; } } function dBug2($var) { $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); } ################################### //get variable name function getVariableName() { $arrBacktrace = debug_backtrace(); //possible 'included' functions $arrInclude = array("include","include_once","require","require_once"); //check for any included/required files. if found, get array of the last included file (they contain the right line numbers) for($i=count($arrBacktrace)-1; $i>=0; $i--) { $arrCurrent = $arrBacktrace[$i]; if(array_key_exists("function", $arrCurrent) && (in_array($arrCurrent["function"], $arrInclude) || ($arrCurrent["function"] != "d" && $arrCurrent["function"] != "dc" && $arrCurrent["function"] != "de" && $arrCurrent["function"] != "df"))) continue; $arrFile = $arrCurrent; break; } $arrLines = file($arrFile["file"]); $code = $arrLines[($arrFile["line"]-1)]; //find call to dBug class preg_match('/\bde{0,1}f{0,1}c{0,1}\s*\(\s*(.+)\s*\);/i', $code, $arrMatches); #dd($arrBacktrace); $this->varname = $arrMatches[1]; if($this->log2file ==1) { $url_time = (isset($_SERVER[HTTPS])) ? 'https' : 'http'; $url_time .= "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]  -  ".date("d.m.y H:i:s").'
'; $this->varname = "$url_time{$this->varname}"; } $this->file = str_replace('\\', '/', $arrFile[file]); $this->line = $arrFile[line]; } //create the main table header function makeTableHeader($type,$header,$colspan=2) { if(!$this->bInitialized) { $header = "{$this->varname} ($header), {$this->file} - line {$this->line}"; $this->bInitialized = true; } else { $header = "{$this->name} ($header)"; } $this->out .= ""; } //create the table row header function makeTDHeader($type,$header) { $this->out .= "\n"; } //error function error($type) { $error="Error: Variable cannot be a"; // 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->varIsArray($var); break; default: $this->varIsArray($var); break; $var=($var==="") ? "[empty string]" : $var; $this->out .= "
".$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]"; $this->out .= $var; } //if variable is an array type function varIsArray($var) { $var_orig = $var; $var_ser = serialize($var); array_push($this->arrHistory, $var_ser); if(is_array($var)) $this->makeTableHeader("array","array"); elseif(is_bool($var)) { $this->makeTableHeader("object","bool"); $var=($var==1) ? "TRUE" : "FALSE"; } elseif(is_double($var)) { $this->makeTableHeader("object","double"); } elseif(is_int($var)) { $this->makeTableHeader("object","integer"); } else { $length = strlen($var); $this->makeTableHeader("object","string [$length]"); } if(is_array($var)) { foreach($var as $key=>$value) { $this->name=$key; $this->makeTDHeader("array",$key); //check for recursion if(is_array($value)) { $var_ser = serialize($value); if(in_array($var_ser, $this->arrHistory, TRUE)) $value = "*RECURSION*"; } if(in_array(gettype($value),$this->arrType)) $this->checkType($value); else { if(is_bool($value)) { $value=($value==1) ? "[TRUE]" : "[FALSE]"; } $value=(($value)==="") ? "[empty string]" : $value; if(strpos($value, 'http')===0) $value = "$value"; else $value = nl2br(htmlspecialchars($value)); $this->out .= $value; } $this->out .= $this->closeTDRow(); } } else { $this->out .= "".nl2br(htmlspecialchars($var)).$this->closeTDRow(); if(is_string($var_orig) && strlen($var_orig)<=$GLOBALS[DD][maxstringforhex]) { for($i=0;$iout .= "HEX: $hex" . $this->closeTDRow(); } } array_pop($this->arrHistory); $this->out .= ""; } //if variable is an object type function varIsObject($var) { $var_ser = serialize($var); array_push($this->arrHistory, $var_ser); $class = get_class($var); $this->makeTableHeader("object", "object of class $class"); if(is_object($var)) { $arrObjVars=get_object_vars($var); foreach($arrObjVars as $key=>$value) { $this->name=$key; $value=(!is_object($value) && trim($value)==="") ? "[empty string]" : $value; $this->makeTDHeader("object",$key); //check for recursion if(is_object($value)||is_array($value)) { $var_ser = serialize($value); if(in_array($var_ser, $this->arrHistory, TRUE)) { $value = (is_object($value)) ? "*RECURSION* -> $".get_class($value) : "*RECURSION*"; } } if(in_array(gettype($value),$this->arrType)) $this->checkType($value); else { if(gettype($value) == 'string') { $value = nl2br(htmlspecialchars($value)); } $this->out .= $value; } $this->out .= $this->closeTDRow(); } # $arrObjMethods=get_class_methods(get_class($var)); # foreach($arrObjMethods as $key=>$value) { # $this->makeTDHeader("object",$value); # $this->out .= "[function]".$this->closeTDRow(); # } } else $this->out .= "".$this->error("object").$this->closeTDRow(); array_pop($this->arrHistory); $this->out .= ""; } //if variable is a resource type function varIsResource($var) { $this->makeTableHeader("resourceC","resource",1); $this->out .= "\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": $tmp = explode(" ",get_resource_type($var)); $db=current($tmp); $this->varIsDBResource($var,$db); break; case "gd": $this->varIsGDResource($var); break; case "xml": $this->varIsXmlResource($var); break; default: $this->out .= get_resource_type($var).$this->closeTDRow(); break; } $this->out .= $this->closeTDRow()."\n"; } //if variable is a database resource type function varIsDBResource($var,$db="mysql") { if($db == "pgsql") $db = "pg"; if($db == "sybase-db" || $db == "sybase-ct") $db = "sybase"; $arrFields = array("name","type","flags"); $numrows=call_user_func($db."_num_rows",$var); $numfields=call_user_func($db."_num_fields",$var); $this->makeTableHeader("resource",$db." result",$numfields+1); $this->out .= " "; for($i=0;$i<$numfields;$i++) { $field_header = ""; for($j=0; $jout .= "".$field_name.""; } $this->out .= ""; for($i=0;$i<$numrows;$i++) { $row=call_user_func($db."_fetch_array",$var,constant(strtoupper($db)."_ASSOC")); $this->out .= "\n"; $this->out .= "".($i+1).""; for($k=0;$k<$numfields;$k++) { $tempField=$field[$k]->name; $fieldrow=$row[($field[$k]->name)]; $fieldrow=($fieldrow==="") ? "[empty string]" : $fieldrow; $this->out .= "".$fieldrow."\n"; } $this->out .= "\n"; } $this->out .= ""; 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"); $this->out .= imagesx($var).$this->closeTDRow(); $this->makeTDHeader("resource","Height"); $this->out .= imagesy($var).$this->closeTDRow(); $this->makeTDHeader("resource","Colors"); $this->out .= imagecolorstotal($var).$this->closeTDRow(); $this->out .= ""; } //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)) { $this->out .= $this->error("xml").$this->closeTDRow()."\n"; return; } $data=$var; $this->xmlParse($xml_parser,$data,1); } $this->out .= $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].='$this->out .= "'.$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].='$this->out .= " ";'; $this->xmlSData[$this->xmlCount].='$this->out .= $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"); $this->out .= (!empty($this->xmlCData[$i])) ? $this->xmlCData[$i] : " "; $this->out .= $this->closeTDRow(); $this->makeTDHeader("xml","xmlComment"); $this->out .= (!empty($this->xmlDData[$i])) ? $this->xmlDData[$i] : " "; $this->out .= $this->closeTDRow(); $this->makeTDHeader("xml","xmlChildren"); unset($this->xmlCData[$i],$this->xmlDData[$i]); } $this->out .= $this->closeTDRow(); $this->out .= ""; $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; } function initJSandCSS() { $out = << table.dBug_array,table.dBug_object,table.dBug_resource,table.dBug_resourceC,table.dBug_xml { font-family:Verdana, Arial, Helvetica, sans-serif; color:#000000; font-size:8pt; } table.dBug_array td,table.dBug_object td,table.dBug_resource td,table.dBug_resourceC td,table.dBug_xml td { font-family:Verdana, Arial, Helvetica, sans-serif; color:#000000; font-size:7pt; } .dBug_arrayHeader, .dBug_objectHeader, .dBug_resourceHeader, .dBug_resourceCHeader, .dBug_xmlHeader { font-weight:bold; color:#FFFFFF; cursor:pointer; } .dBug_arrayKey, .dBug_objectKey, .dBug_xmlKey { cursor:pointer; } /* array */ table.dBug_array { background-color:#00A000; margin-top:8px;} table.dBug_array td { background-color:#FFFFFF; padding-left:3px; font-size:8pt; } table.dBug_array td.dBug_arrayHeader { background-color:#90FF90; } table.dBug_array td.dBug_arrayKey { background-color:#CCFFCC; text-align:right; padding-right:5px; } /* object */ table.dBug_object { background-color:#4040FF; margin-top:8px;} table.dBug_object td { background-color:#FFFFFF; font-size:8pt; } table.dBug_object td.dBug_objectHeader { background-color:#C0C0FF; } table.dBug_object td.dBug_objectKey { background-color:#CCDDFF; text-align:right; padding-right:5px; } /* resource */ table.dBug_resourceC { background-color:#884488; margin-top:8px;} table.dBug_resourceC td { background-color:#FFFFFF; font-size:8pt; } table.dBug_resourceC td.dBug_resourceCHeader { background-color:#AA66AA; } table.dBug_resourceC td.dBug_resourceCKey { background-color:#FFDDFF; text-align:right; padding-right:5px; } /* resource */ table.dBug_resource { background-color:#884488; margin-top:8px;} table.dBug_resource td { background-color:#FFFFFF; font-size:8pt; } table.dBug_resource td.dBug_resourceHeader { background-color:#AA66AA; } table.dBug_resource td.dBug_resourceKey { background-color:#FFDDFF; text-align:right; padding-right:5px; } /* xml */ table.dBug_xml { background-color:#888888;} table.dBug_xml td { background-color:#FFFFFF; font-size:8pt; } table.dBug_xml td.dBug_xmlHeader { background-color:#AAAAAA; } table.dBug_xml td.dBug_xmlKey { background-color:#DDDDDD; text-align:right; padding-right:5px; } SCRIPTS; return $out; } } ?> Andreas Blöschl Photography

Über mich

Hallo, wie unschwer zu erraten ist, heiße ich Andreas Blöschl. Ich bin Fotograf und Webentwickler aus Wien. Meine Leidenschaft für die Fotografie begann mit meiner ersten Spiegelreflexkamera 2009. Parallel dazu besuchte ich die HTL3R Rennweg, wo ich die Basics der Webentwicklung lernte. Ich bin derzeit Student an der WU Wien, wo ich im Masterprogramm Strategy, Inovation and Management Control studiere.

 

Sollten Sie irgendwelche Fragen haben, erreichen Sie mich unter:
kontakt[at]andreasbloeschl.at

 

Andreas Blöschl