totalStartTime = array_sum(explode(" ",microtime())); } function before() { //if (isset($_REQUEST['stat'])) //$_SESSION['stat']=$_REQUEST['stat']; if (!isset($_SESSION['stat']) || !preg_match("@(sql|path)@", $_SESSION['stat'])) return; $this->queryStartTime = array_sum(explode(" ",microtime())); } function after($q, $bind) { if (! isset($_SESSION['stat']) || !preg_match("@(sql|path)@", $_SESSION['stat'])) return; $stats=array(); $queryEndTime = array_sum(explode(" ",microtime())); $processTime = $queryEndTime - $this->queryStartTime; $stats['t']=$processTime; if(preg_match("@(sql)@", $_SESSION['stat'])) { $stats['q'] = (string)$q; $stats['bind'] = $bind; } if(preg_match("@(path)@", $_SESSION['stat'])) { $btr=debug_backtrace(); $src=''; if(is_array($btr))foreach ($btr as $k => $v) { if(!isset($v['file']) || !isset($v['line']) ) continue; $src .= "\t".$v['file'].' LINE '.$v['line']."\n"; } $stats['src']=$src; } $this->query_log[]=$stats; } function report(){ //if (isset($_REQUEST['stat'])) //$_SESSION['stat']=$_REQUEST['stat']; if (!isset($_SESSION['stat']) || !preg_match("@(sql)@", $_SESSION['stat'])) return ""; $tq=count($this->query_log); $totalEndTime = array_sum(explode(" ",microtime())); $totalProcessTime = $totalEndTime - $this->totalStartTime; $s=0; if(is_array($this->query_log))foreach ($this->query_log as $k => $v) { $s+=$v['t']; } //echo "
".__FILE__." (".__LINE__.")
"; print_r($this->query_log); echo "
"; // if( preg_match("@(unique)@", $_SESSION['stat'])) { if( preg_match("@(qunique|qpunique)@", $_SESSION['stat'])) { $cnt=array(); if(is_array($this->query_log))foreach ($this->query_log as $k => $v) { //if(!isset($v['src'])) $v['src']=''; if( preg_match("@(qunique)@", $_SESSION['stat'])){ $ind=$v['q']; $paths[$ind][]=$v['src']; }else if( preg_match("@(qpunique)@", $_SESSION['stat'])) $ind=$v['q']."\n".$v['src']; else continue; if (!isset($cnt[$ind])) $cnt[$ind]=0; $cnt[$ind]++; } $this->query_log4=array(); if(is_array($this->query_log))foreach ($this->query_log as $k => $v) { //if(!isset($v['src'])) $v['src']=''; //$ind=$v['q']."\n".$v['src']; if( preg_match("@(qunique)@", $_SESSION['stat'])){ $ind=$v['q']; }else if( preg_match("@(qpunique)@", $_SESSION['stat'])) $ind=$v['q']."\n".$v['src']; else continue; if (!isset($cnt[$ind])) continue; $v['qty']=$cnt[$ind]; $this->query_log4[]=$v; unset($cnt[$ind]); } if(!function_exists('cmp')){ function cmp($a, $b) { if ($a['qty'] == $b['qty']) return 0; return ((int)$a['qty'] > (int)$b['qty']) ? -1 : 1; } } usort($this->query_log4, "cmp"); $this->query_log=$this->query_log4; }; //echo "
".__FILE__." (".__LINE__.")
"; print_r($this->query_log); echo "
"; $rep="totalProcessTime - $totalProcessTime sec"; $rep.="\nQueries - ".$tq.". \nQueries time - $s. "; if( preg_match("@(qunique|qpunique)@", $_SESSION['stat'])) $rep.="\n Unique queries - ".count($this->query_log); if(is_array($this->query_log))foreach ($this->query_log as $k => $v) { $rep.="\n\n".($k+1).". ".(isset($v['qty']) ? '['.$v['qty'].']' : '')." (".number_format($v['t'],3).") ".$v['q'] ; ob_start(); echo ""; print_r($v['bind']); echo ""; if($paths){ echo ""; print_r($paths[$v['q']]); echo ""; }; $xxx=ob_get_contents(); ob_end_clean(); $rep.="\n\n".$xxx; //$rep.="\n\n".($k+1).". ".(isset($v['qty']) ? '['.$v['qty'].']' : '')." (".number_format($v['t'],3).") ".$v['q']." \n".(isset($v['src']) ? $v['src'] : '') ; $rep.=" \n".(isset($v['src']) ? $v['src'] : '') ; } echo "

"; return $rep; } }