点击的话,一般都是用web server日志来记录的。之后再进行统计。
周,月,季度 应该是在日的基础上累加。当然要是弄独立ip点击的话,按月,季度统计的话就计算量太大了。
周,月,季度 应该是在日的基础上累加。当然要是弄独立ip点击的话,按月,季度统计的话就计算量太大了。
解决方案 »
- \u7236\u6bcd\u773c\u4e2d\u7684\u5b5d\u987a\u8303\u51b0\u51b0\uff0c\u5f1f请问这是什么编码
- 求救!怎么获取站点下的php文件的html源码
- 求实现统计父表信息平均值
- http://127.0.0.1:81/magento2/index.php/install/ 谁能解释一下这人路径啊》文件名+ 路径?
- 怎樣才能修改圖片
- php无法使用localhost连接mysql服务器
- 有高手做网站吗???
- 不知道是不是update语句有错,大家帮我看看吧
- 怎么样才能激活php的缓存区,我现在用ob_get_contents()得到的是空字符串,那位知道是怎么回事情?
- 急!!!!!请帮忙!
- 高过soap的兄弟帮忙看看
- 为什么别人不能访问我公司的网站。望达人现身!!
其中$db为mysql的操作类。
------------------------------------------------ /**
* 访问量统计
* 每个ELSE后面$db->Execute("UPDATE `statistics_num` set `*Hits` = '0'");表示清零
* @param string $type 类型
*/
function getStatisticsNum($field='*', $type=Null)
{
GLOBAL $db; $where = $type ? "`Type` = '{$type}'" : '1';
$result = $db->getRow("Select SUM(Hits) as Hits, SUM(DayHits) as DayHits From `statistics_num` ");
Return $result;
}
function statisticsNum($type=Null)
{
GLOBAL $db; if(!$type)Return False; $result = $db->getRow("select * from `statistics_num` where `Type` = '{$type}';");
//print_r($result); if($result){
//从数据库里初始化
$id = $result['ID']; //该纪录ID
$oldTimeStamp = $result['LastHits']; //最后点击时间
$hits = $result['Hits']; //总点击
$yhits = $result['YearHits']; //年点击
$mhits = $result['MonthHits']; //月点击
$whits = $result['WeekHits']; //周点击
$dhits = $result['DoubleDayHits']; //天点击
$ddhits = $result['DayHits']; //48小时点击
}
else{
$oldTimeStamp = strtotime(date('Y-m-d 00:00:00', time()));
$hits = $yhits = $mhits = $whits = $dhits = $ddhits = 0;
} $nowDateArray = getdate();
$oldDateArray = getdate($oldTimeStamp); //year process
if($nowDateArray["year"] == $oldDateArray["year"]):
$yhits ++;
else:
@$db->Execute("UPDATE `statistics_num` set `YearHits` = '0' /*where `ID` = '{$id}'*/");
$yhits = 1;
endif; //month process
if($nowDateArray["year"] == $oldDateArray["year"] && $nowDateArray["mon"] == $oldDateArray["mon"]):
$mhits ++;
else:
@$db->Execute("UPDATE `statistics_num` set `MonthHits` = '0'");
$mhits = 1;
endif; //week process
//取得本周的开始结束时间段-[13985019168] //本周开始时间,从今天开始后退n天到星期天的0点,一个周从星期天开始.如果从星期一开始把0,0,0改为23,59,59
$tmpStartDate = mktime(0,0,0,$nowDateArray["mon"],$nowDateArray["mday"],$nowDateArray["year"]) - ($nowDateArray["wday"] * 86400);
//本周结束时间,本周六12点59
$tmpEndDate = mktime(23,59,59,$nowDateArray["mon"],$nowDateArray["mday"],$nowDateArray["year"]) + ((6 - $nowDateArray["wday"]) * 86400);
//如果上次更新在这个时间段内,为同一周
if($oldTimeStamp >= $tmpStartDate && $oldTimeStamp <= $tmpEndDate):
$whits ++;
else:
@$db->Execute("UPDATE `statistics_num` set `WeekHits` = '0'");
$whits = 1;
endif;
//double day process==>48hours
//如果相差时间在48小时内,为同一个48小时 &&
//时间差大于48小时,清零
if( 60*60*24*2 < ($nowDateArray[0] - $oldDateArray[0]) ):
@$db->Execute("UPDATE `statistics_num` set `DoubleDayHits` = '0'");
$ddhits = 1;
//如果时间相差在24~48小时内,前一天+1
elseif( 60*60*24*2 > ($nowDateArray[0] - $oldDateArray[0]) && ($nowDateArray[0] - $oldDateArray[0]) > 60*60*24 ):
$ddhits = $dhits+1;
//如果相差在24小时内,直接+1
else:
$ddhits = $ddhits+1;
endif;
//day process
if( $nowDateArray["year"] == $oldDateArray["year"] &&
$nowDateArray["mon"] == $oldDateArray["mon"] &&
$nowDateArray["mday"] == $oldDateArray["mday"]):
$dhits ++;
else:
@$db->Execute("UPDATE `statistics_num` set `DayHits` = '0', `LastHits` = '{$nowDateArray[0]}'");
$dhits = 1;
endif;
//接下来更新数据库
if($result){
$hits ++;//总点击数加1 $sql = "UPDATE `statistics_num` set `Hits` = '{$hits}', `LastHits` = '{$nowDateArray[0]}', `YearHits` = '{$yhits}', `MonthHits` = '{$mhits}', `WeekHits` = '{$whits}', `DayHits` = '{$dhits}', `DoubleDayHits` = '{$ddhits}' where `ID` = '{$id}'";
}
else{
$sql = "INSERT INTO `statistics_num` (`Hits`, `YearHits`, `MonthHits`, `WeekHits`, `DoubleDayHits`, `DayHits`, `LastHits`, `Type`) VALUES ('1', '1', '1', '1', '1', '1', '" . time() . "', '{$type}');";
} $db->Execute($sql);
}//End function