设为首页 收藏本站
查看: 659|回复: 0

[经验分享] PHP中利用mysql进行访问统计的思路和实现代码

[复制链接]

尚未签到

发表于 2016-10-24 08:29:19 | 显示全部楼层 |阅读模式
  看了网上很多统计都是使用文本来存储信息的,但是那样的话非常不方便,而且如果数据丢失了的话就很麻烦,如果存储在数据库里的话就比较好,把WEB服务器和数据库服务器分开的话,那么就能够长期的保持访问统计的数据了。
  基本访问统计包括:日访问量、月访问量、总访问量、平均访问量、日最高访问量等等数据
  那些数据主要是关于时间的运算,为了方便运算,我们采用Unix时间戳是最方便合理的,下面我简单的说以下我实现统计的代码。
  数据库结构:
  #
# 访问统计表
#
  DROP TABLE IF EXISTS `st_accesscount`;
CREATE TABLE `st_accesscount` (
`access_id` int(11) unsigned NOT NULL auto_increment,
`session_id` varchar(100) NOT NULL default '',
`access_time` int(20) NOT NULL default '0',
`access_ip` varchar(100) default NULL,
`access_source` varchar(100) default NULL,
`access_page` varchar(255) default NULL,
`access_os` varchar(100) default NULL,
`access_browse` varchar(100) default NULL,
PRIMARY KEY (`access_id`)
);

  实现代码:
  我把核心代码写出来,其他显示层代码和复杂计算自己想想,呵呵 :-)
  <?php
/*********************************************
* 文件:count.php
* 用途:网站访问统计页
* 版本:v1.0
* 创建:2005-04-06 17:08
* 修改:2005-04-06 17:14
* 版权:heiyeluren
*********************************************/
  /* 网站访问量统计 */
/* 基本变量 */
  // 当前时间
$cur_date = date("Y年m月d日 H:i:s");
$time = time();
  // 把当前时间单独取出
$c[y] = date("Y");
$c[m] = date("m");
$c[d] = date("d");
$c[h] = date("H");
$c = date("i");
$c = date("s");

// 今日访问量
$today = mktime(0,0,0);
$db->query(" SELECT * FROM st_accesscount WHERE access_time>=$today AND access_time<=$time ");
$today_count = $db->nf();
  // 昨日访问量
$yesterday = mktime(0,0,0,$c[m],$c[d]-1,$c[y]);
$db->query(" SELECT * FROM st_accesscount WHERE access_time>=$yesterday AND access_time<=$today ");
$yesterday_count = $db->nf();
  // 本月访问量
$month = mktime(0,0,0,$c[m],1,$c[y]);
$db->query(" SELECT * FROM st_accesscount WHERE access_time>=$month AND access_time<=$time ");
$month_count = $db->nf();
  // 总统计天数
$db->query(" SELECT MIN(access_time) AS ago_time FROM st_accesscount ");
while($db->next_record())
{
$ago_time = $db->f("ago_time");
}
$day = ($time-$ago_time)/60/60/24;
(($day-floor($day)) > 0) ? ($all_day = floor($day)+1) : ($all_day = floor($day));
  // 总访问量
$db->query(" SELECT * FROM st_accesscount ");
$all_count = $db->nf();

// 日均访问量
$day_access = round($all_count/$all_day, 1);
  
?>
  上面的代码比较清晰,自己慢慢琢磨,恩,另外说一句,上面使用了phplib的db类库。。。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-290463-1-1.html 上篇帖子: MySQL先排序后分组(order by first then group by) 下篇帖子: Jsp/bean Mysql数据库 新增 修改 删除的通用方法
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表