www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/include/counter.fun.php

    <?php
!defined('M_COM') && exit('No Permission');
function recent2main(){//每天自动更新,将30天内各文档的月统计与周统计记录汇总到文档的archive_rec的表中,将30天之前的记录清除。
	global $db,$tblprefix,$timestamp,$monthstats,$weekstats;
	@set_time_limit(1000);
	@ignore_user_abort(TRUE);
	$curdate = date('Ymd',$timestamp);//当天日期字串
	if(empty($monthstats) && empty($weekstats)) return;
	if($db->result_one("SELECT count(*) FROM {$tblprefix}arecents WHERE vardate='$curdate'")) return;//当天的记录已经处理过了。

	$mstatarr = empty($monthstats) ? array() : array_filter(explode(',',$monthstats));
	$wstatarr = empty($weekstats) ? array() : array_filter(explode(',',$weekstats));
	$rperiod = $mstatarr ? 30 : 7;
	$mindate = $curdate - $rperiod + 1;
	$db->query("DELETE FROM {$tblprefix}arecents WHERE vardate<$mindate OR vardate>$curdate", 'UNBUFFERED');//清除日记录表中的无效日的记录
	
	//文档记录中的原记录清空
	$setstr = $wherestr = '';
	foreach($mstatarr as $k){
		$setstr .= ($setstr ? ',' : '')."m$k=0";
		$wherestr .= ($wherestr ? ' OR ' : '')."m$k != 0";
	}
	foreach($wstatarr as $k){
		$setstr .= ($setstr ? ',' : '')."w$k=0";
		$wherestr .= ($wherestr ? ' OR ' : '')."w$k != 0";
	}
	$db->query("UPDATE {$tblprefix}archives_rec SET $setstr WHERE $wherestr", 'UNBUFFERED');
	
	if($mstatarr){//更新月记录
		$selectstr = 'aid';
		foreach($mstatarr as $k) $selectstr .= ",SUM($k) AS m$k";
		$query = $db->query("SELECT $selectstr FROM {$tblprefix}arecents GROUP BY aid");
		while($item = $db->fetch_array($query)){
			$setstr = '';
			foreach($mstatarr as $k) $setstr .= ($setstr ? ',' : '')."m$k=".$item['m'.$k];
			$db->query("UPDATE {$tblprefix}archives_rec SET $setstr WHERE aid=$item[aid]", 'UNBUFFERED');
		}
	
	}
	if($wstatarr){//更新周记录
		$selectstr = 'aid';
		foreach($wstatarr as $k) $selectstr .= ",SUM($k) AS w$k";
		$mindate = $curdate - 7;
		$query = $db->query("SELECT $selectstr FROM {$tblprefix}arecents WHERE vardate>$mindate GROUP BY aid");
		while($item = $db->fetch_array($query)){
			$setstr = '';
			foreach($wstatarr as $k) $setstr .= ($setstr ? ',' : '')."w$k=".$item['w'.$k];
			$db->query("UPDATE {$tblprefix}archives_rec SET $setstr WHERE aid=$item[aid]", 'UNBUFFERED');
		}
	
	}
}
function album_statsum(){//固定时间间隔统计合辑内的各种统计数据的合计//由文档统计的动作来触发这个函数
	global $db,$tblprefix,$timestamp,$albumstats,$albumstatcircle,$aaltypes;
	$cachetimefile = M_ROOT.'./dynamic/stats/albumsum_time.cac';
	if(empty($albumstats) || ($timestamp - @filemtime($cachetimefile) < $albumstatcircle * 3600)) return;
	$statarr = array_filter(explode(',',$albumstats));
	if(!$statarr) return;
	$atids = array();
	load_cache('aaltypes');
	foreach($aaltypes as $k => $v){
		$v = read_cache('altype',$k,'',$v['sid']);
		$v['statsum'] && $atids[] = $k;
	}
	if(!$atids) return;
	@set_time_limit(1000);
	@ignore_user_abort(TRUE);

	$selectstr = 'b.pid';
	foreach($statarr as $k) $selectstr .= ",SUM(a.$k) AS a$k";
	$query = $db->query("SELECT $selectstr FROM {$tblprefix}albums AS b LEFT JOIN {$tblprefix}archives AS a ON a.aid=b.aid WHERE a.checked=1 AND b.checked=1 AND b.patid IN (".mimplode($atids).") GROUP BY b.pid");
	while($item = $db->fetch_array($query)){
		$setstr = '';
		foreach($statarr as $k) $setstr .= ($setstr ? ',' : '')."a$k=".$item["a$k"];
		$db->query("UPDATE {$tblprefix}archives_rec SET $setstr WHERE aid=$item[pid]", 'UNBUFFERED');
	}
	if(@$fp = fopen($cachetimefile,'w')) fclose($fp);
	return;
}

?>