/*
Для вывода статистики в адресной строке какой-либо страницы добавьте
параметр stat=sql, например
http://your_domain/index.php?stat=sql
http://your_domain/index.php?cat=1&stat=sql
При значении параметра stat=sql_path будут показаны также места вызова запросов в скриптах.
При значении параметра stat=sql_unique будут выведена статистика по уникальным запросам.
При значении параметра stat=sql_qunique будут выведена статистика по уникальным запросам.
При значении параметра stat=sql_qpunique будут выведена статистика по уникальным парам запрос-путь.
Статистика будет выведена на вызываемой и на последующих страницах при переходах по ссылкам.
Для отключения вывода добавьте параметр stat=off
*/
class statistics{
var $totalStartTime;
var $queryStartTime;
var $query_log;
// function statistics(){
function __construct(){
if(isset($_REQUEST['stat']))
$_SESSION['stat']=$_REQUEST['stat'];
$this->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 "
"; print_r($this->query_log); echo "