为自己的站点实现访客统计
简介
我们都很好奇自己的站点有没有被人所熟知,每天能有多少的访问量。
最简单的方法便是使用平台的统计功能,比如cnzz,百度统计、谷歌统计等等平台,但这篇文章的重点是自己写代码实现统计功能
一、HTML语句实现
推荐加到页面的底部界面
<center>
<div><a href="https://www.qian.blue/"> © 勿埋我心</a><script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script><span id="busuanzi_container_site_uv" style='display:none'> 访客总人数<span id="busuanzi_value_site_uv"></span>人</span><span id="busuanzi_container_site_pv" style='display:none'> 本站总访问量<span id="busuanzi_value_site_pv"></span>次</span>
</div>
</center>
二、文件方式简单统计
用php实现一个简单的访客统计功能,统计网站的总访问量是多少,简单实用。php通过每次打开文本文件,获取文本中的数字,进行加1再写入到文本中。所以只要每次有访问就会进行累加pv数量来实现的简单访客次数的统计。
<?phpif(!file_exists("count.txt")){$one_file=fopen("count.txt","w+"); //建立一个统计文本,如果不存在就创建echo"您是第<font color='red'><b>1</b></font>位访客"; //首次直接输出第一次fwrite("count.txt","1"); //把数字1写入文本fclose("$one_file");}else{ //如果不是第一次访问直接读取内容,并+1,写入更新后再显示新的访客数$num=file_get_contents("count.txt");$num++;file_put_contents("count.txt","$num");$newnum=);$newnum=file_get_contents("count.txt");echo"您是第<font color='red'><b>".$newnum."</b></font>位访客";setcookie("access",1, time()+3600*24);//访问过标记}}?>
三、获取详细信息统计
在网站的一个公共文件中,进行每次访问时获取用户的ip、浏览器类型、系统类型、访问时间、访问当前地址、访问来源、ip对属地信息的统计。通过这些信息就能大致知道哪个地方访问人数最大、哪篇文章访问人数最大、今日访问人数、pv、恶意访问ip等信息就都出来了。
1.数据库表结构:
CREATE TABLE `visitors` (`id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id',`ip` char(30) DEFAULT NULL COMMENT 'ip地址',`froms` char(100) DEFAULT NULL COMMENT '归属地',`add_time` datetime NOT NULL COMMENT '添加时间',`system` char(60) DEFAULT NULL COMMENT '操作系统',`browser` char(200) DEFAULT NULL COMMENT '浏览器',`pageview` char(200) DEFAULT NULL COMMENT '受访页面',`source_link` varchar(1000) DEFAULT NULL COMMENT '来源链接',PRIMARY KEY (`id`),KEY `ip` (`ip`),KEY `add_time` (`add_time`)) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='访客表';
2.php统计代码
在一个公共php文件中放置获取信息代码,并写入到数据库中。
//获取访客信息//pdo连接数据库$db_ms='mysql';$db_host='127.0.0.1';$db_user='root';$db_pass='123456';$db_name='test';$dbh=$db_ms.':host='.$db_host.';'.'dbname='.$db_name;try{$dbh = new PDO($dbh,$db_user,$db_pass);//echo '连接成功';$dbh -> query('set names utf8');}catch(PDOException $e){die('error:'.$e->getMessage());}function visitor(){global $dbh;#当前url$url=$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI'];#获取ip和来源$address = GetIpFrom();$froms = $address[0];$ip = $address[1];#获取浏览器和系统类型$broswer = get_broswer();$os = get_os();#获取最后来源地址if(empty($_SERVER['HTTP_REFERER'])){$source_link = $url;}else{$source_link = $_SERVER['HTTP_REFERER'];}#限制ip访问次数$sqlco = "select count(id) as num FROM visitors where ip ="."'".$ip."'"." AND add_time>="."'".date('Y-m-d',time())."'";$cres = $dbh -> query($sqlco);$vnum = $cres -> fetch();if($vnum['num']>10000){exit('Sorry... You visited the number more than 10000 times today, and the access denied!');}#获取到的信息放入数据库$sql =" INSERT INTO visitors (ip,froms,add_time,system,browser,pageview,source_link) VALUES ('$ip','$froms',now(),'$os','$broswer','$url','$source_link')";$dbh -> exec($sql);}
浏览器信息和ip信息获取函数
//获取浏览器信息function get_broswer(){$sys = $_SERVER['HTTP_USER_AGENT']; //获取用户代理字符串if (stripos($sys, "Firefox/") > 0) {preg_match("/Firefox\/([^;)]+)+/i", $sys, $b);$exp[0] = "Firefox";$exp[1] = $b[1]; //获取火狐浏览器的版本号} elseif (stripos($sys, "Maxthon") > 0) {preg_match("/Maxthon\/([\d\.]+)/", $sys, $aoyou);$exp[0] = "傲游";$exp[1] = $aoyou[1];} elseif (stripos($sys, "Baiduspider") > 0) {$exp[0] = "百度";$exp[1] = '蜘蛛';}elseif (stripos($sys, "YisouSpider") > 0) {$exp[0] = "一搜";$exp[1] = '蜘蛛';}elseif (stripos($sys, "Googlebot") > 0) {$exp[0] = "谷歌";$exp[1] = '蜘蛛';}elseif (stripos($sys, "Android 4.3") > 0) {$exp[0] = "安卓";$exp[1] = '4.3';}elseif (stripos($sys, "MSIE") > 0) {preg_match("/MSIE\s+([^;)]+)+/i", $sys, $ie);$exp[0] = "IE";$exp[1] = $ie[1]; //获取IE的版本号} elseif (stripos($sys, "OPR") > 0) {preg_match("/OPR\/([\d\.]+)/", $sys, $opera);$exp[0] = "Opera";$exp[1] = $opera[1];} elseif(stripos($sys, "Edge") > 0) {//win10 Edge浏览器 添加了chrome内核标记 在判断Chrome之前匹配preg_match("/Edge\/([\d\.]+)/", $sys, $Edge);$exp[0] = "Edge";$exp[1] = $Edge[1];} elseif (stripos($sys, "Chrome") > 0) {preg_match("/Chrome\/([\d\.]+)/", $sys, $google);$exp[0] = "Chrome";$exp[1] = $google[1]; //获取google chrome的版本号} elseif(stripos($sys,'rv:')>0 && stripos($sys,'Gecko')>0){preg_match("/rv:([\d\.]+)/", $sys, $IE);$exp[0] = "IE";$exp[1] = $IE[1];}else if(stripos($sys,'AhrefsBot')>0){$exp[0] = "AhrefsBot";$exp[1] = '蜘蛛';}else if(stripos($sys,'Safari')>0){preg_match("/([\d\.]+)/", $sys, $safari);$exp[0] = "Safari";$exp[1] = $safari[1];}else if(stripos($sys,'bingbot')>0){$exp[0] = "必应";$exp[1] = '蜘蛛';}else if(stripos($sys,'WinHttp')>0){$exp[0] = "windows";$exp[1] = 'WinHttp 请求接口工具';}else if(stripos($sys,'iPhone OS 10')>0){$exp[0] = "iPhone";$exp[1] = 'OS 10';}else if(stripos($sys,'Sogou')>0){$exp[0] = "搜狗";$exp[1] = '蜘蛛';}else if(stripos($sys,'HUAWEIM')>0){$exp[0] = "华为";$exp[1] = '手机端';}else if(stripos($sys,'Dalvik')>0){$exp[0] = "安卓";$exp[1] = 'Dalvik虚拟机';}else if(stripos($sys,'Mac OS X 10')>0){$exp[0] = "MAC";$exp[1] = 'OS X10';}else if(stripos($sys,'Opera/9.8')>0){$exp[0] = "Opera";$exp[1] = '9.8';}else if(stripos($sys,'JikeSpider')>0){$exp[0] = "即刻";$exp[1] = '蜘蛛';}else if(stripos($sys,'Baiduspider')>0){$exp[0] <(preg_match('/win/i', $agent) && strpos($agent, '95')){$os = 'Windows 95';}else if (preg_match('/win 9x/i', $agent) && strpos($agent, '4.90')){$os = 'Windows ME';}else if (preg_match('/win/i', $agent) && preg_match('/98/i', $agent)){$os = 'Windows 98';}else if (preg_match('/win/i', $agent) && preg_match('/nt 6.0/i', $agent)){$os = 'Windows Vista';}else if (preg_match('/win/i', $agent) && preg_match('/nt 6.1/i', $agent)){$os = 'Windows 7';}else if (preg_match('/win/i', $agent) && preg_match('/nt 6.2/i', $agent)){$os = 'Windows 8';}else if(preg_match('/win/i', $agent) && preg_match('/nt 10.0/i', $agent)){$os = 'Windows 10';#添加win10判断}else if (preg_match('/win/i', $agent) && preg_match('/nt 5.1/i', $agent)){$os = 'Windows XP';}else if (preg_match('/win/i', $agent) && preg_match('/nt 5/i', $agent)){$os = 'Windows 2000';}else if (preg_match('/win/i', $agent) && preg_match('/nt/i', $agent)){$os = 'Windows NT';}else if (preg_match('/win/i', $agent) && preg_match('/32/i', $agent)){$os = 'Windows 32';}else if (preg_match('/linux/i', $agent)){$os = 'Linux';}else if (preg_match('/unix/i', $agent)){$os = 'Unix';}else if (preg_match('/sun/i', $agent) && preg_match('/os/i', $agent)){$os = 'SunOS';}else if (preg_match('/ibm/i', $agent) && preg_match('/os/i', $agent)){$os = 'IBM OS/2';}else if (preg_match('/Mac/i', $agent) && preg_match('/PC/i', $agent)){$os = 'Macintosh';}else if (preg_match('/PowerPC/i', $agent)){$os = 'PowerPC';}else if (preg_match('/AIX/i', $agent)){$os = 'AIX';}else if (preg_match('/HPUX/i', $agent)){$os = 'HPUX';}else if (preg_match('/NetBSD/i', $agent)){$os = 'NetBSD';}else if (preg_match('/BSD/i', $agent)){$os = 'BSD';}else if (preg_match('/OSF1/i', $agent)){$os = 'OSF1';}else if (preg_match('/IRIX/i', $agent)){$os = 'IRIX';}else if (preg_match('/FreeBSD/i', $agent)){$os = 'FreeBSD';}else if (preg_match('/teleport/i', $agent)){$os = 'teleport';}else if (preg_match('/flashget/i', $agent)){$os = 'flashget';}else if (preg_match('/webzip/i', $agent)){$os = 'webzip';}else if (preg_match('/offline/i', $agent)){$os = 'offline';}else if (preg_match('/iPhone OS 8/i', $agent)){$os = 'iOS 8';}else if (preg_match('/YisouSpider/i', $agent)){$os = '一搜引擎';}else if (preg_match('/Yahoo! Slurp/i', $agent)){$os = '雅虎引擎';}else if (preg_match('/iPhone OS 6/i', $agent)){$os = 'iOS 6';}else if (preg_match('/Baiduspider/i', $agent)){$os = '百度引擎';}else if (preg_match('/iPhone OS 10/i', $agent)){$os = 'iOS 10';}else if (preg_match('/Mac OS X 10/i', $agent)){$os = 'Mac OS 10';}else if (preg_match('/Ahrefs/i', $agent)){$os = 'Ahrefs SEO 引擎';}else if (preg_match('/JikeSpider/i', $agent)){$os = '即刻引擎';}else if (preg_match('/Googlebot/i', $agent)){$os = '谷歌引擎';}else if(preg_match('/bingbot/i',$agent)){$os = '必应引擎';}else if(preg_match('/iPhone OS 7/i',$agent)){$os = 'iOS 7';}else if(preg_match('/Sogou web spider/i',$agent)){as $ip){ $ip = trim($ip); if ($ip != 'unknown'){ $realip = $ip; break; } } }else if(isset($_SERVER['HTTP_CLIENT_IP']) && !empty($_SERVER['HTTP_CLIENT_IP']) && strcasecmp($_SERVER['HTTP_CLIENT_IP'], $unknown)){ $realip = $_SERVER[ } }else{ if(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), $unknown)){ $realip = getenv("HTTP_X_FORWARDED_FOR"); }else if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), $unknown)){ $realip = getenv("HTTP_CLIENT_IP"); }else if(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), $unknown)){ $realip = getenv("REMOTE_ADDR"); }else{ $realip = $unknown; } } $realip = preg_match("/[\d\.]{7,15}/", $realip, $matches) ? $matches[0] : $unknown; return $realip; } function GetIpFrom($ip = ''){ if(empty($ip)){ $ip = GetIps(); }$res = @file_get_contents('http://ip.taobao.com/service/getIpInfo.php?ip='.$ip);if($res){$json = json_decode($res,true);}else{$json = '';}//var_dump($json);$address[0] = $json['data']['country'].$json['data']['region'].$json['data']['city'].$json['data']['isp'];$address[1] = $ip;return $address;}
上面的函数可以都放在一个公共的文件中,并调用函数
visitor();
即可。其他统计的功能都通过数据库查询统计出来,如:
#查看pvselect count(*) as pv from visitors;#查看uv、今日ipselect distinct(count(*)) as pv from visitors;...
文章来源: 为自己的站点实现访客统计 - 勿埋我心
为自己的站点实现访客统计相关推荐
- 精仿CNZZ网站访客统计系统源码 | 网页访客抓取采集源码 | 网站访客流量统计源码
源码简介: 仿cnzz多用户统计系统,功能强大,界面完美仿照cnzz统计!支持所有浏览器不乱码,程序是完整,没有删除任何东西,请大家放心使用,想建立自己的统计站点就这么简单! 安装的时候先还原数据库 ...
- 用PHP做网站的PV、UV、IP访客统计
用PHP做网站访客统计,听起来好像有点多此一举,想想有那么多好用的统计工具不用,偏偏想自己写?不过,有时还是按项目需求走吧. 就当我是在废话吧,还是想唠叨一下PV.UV.IP三者的定义与区别. 1.P ...
- 访客统计php代码转换图片,PHP实现简单网站访客统计的方法实例
PHP网站访客统计 一.在网站根目录新建一个名为tongji.php的文件,然后写入以下代码<?php $n=file_get_contents('tongji.txt'); $n++; fil ...
- 统计代码放在网站php,网站添加简单访客统计代码
都知道,网站的来访量的多少只有网站主自己知道,是因为在后台安装统计工具,访客想要知道某个网站有多少来访量怎么办呢?其实还可以通过添加代码在网站的前端显示哦,那么今天明星就来说说网站如何添加访客统计代码 ...
- 博客添加音乐插件、网站运行时间、文章阅读次数和网站访客统计
今天为博客增加了音乐播放插件.博客页脚网站安全运行时间.文章阅读次数以及网站访客统计的功能,接下来进行详细介绍. 博客音乐插件的使用 本博客使用的音乐播放插件为hexo-tag-aplayer ...
- 网站如何添加访客统计代码
都知道,网站的来访量的多少只有网站主自己知道,是因为在后台安装统计工具,访客想要知道某个网站有多少来访量怎么办呢?其实还可以通过添加代码在网站的前端显示哦,那么今天明星就来说说网站如何添加访客统计代码 ...
- php实现一个简单的访客统计功能
文章来源:https://www.zixuephp.net/article-113.html 对我帮助非常大,谢谢 一.文件方式简单统计 用php实现一个简单的访客统计功能,统计网站的总访问量是多少, ...
- CSDN访客统计(不用量子恒道)
一.FlagCounter介绍 想必很多csdner都想对自己的博客进行访客统计,CSDN为博客专家提供了专门的量子恒道统计功能进行访客统计,普通用户无法引入js代码进行访客统计.我们可以换一种思路, ...
- Hexo Next主题添加访客统计、访问次数统计、文章阅读次数统计
Hexo的版本:v3.9.0 Next的版本:v7.4.0 1.打开next主题配置文件\themes\next_config.yml,搜索找到busuanzi_count,把enable设置为tru ...
最新文章
- 树莓派避障小车(python)
- AutoML的相关链接大全
- 在SSH整合过程中:org/hibernate/engine/spi/SharedSessionContractImplementor
- 线性代数之行列式基础点
- 【论文阅读】A Gentle Introduction to Graph Neural Networks [图神经网络入门](6)
- 跟我读论文丨ACL2021 NER BERT化隐马尔可夫模型用于多源弱监督命名实体识别
- C语言-函数的指针/函数指针/回调函数
- 如何在Visual Studio中切换自动换行?
- Java开源测试工具
- 高效人士的七个管理习惯
- 宝塔linux面板什么用,宝塔面板干什么用的呢?
- python中pymysql的小坑
- 设计数据库中常见的规范
- Oracle 以当前时间为准,取前三个小时后两个小时的分钟枚举
- “驱动人生”利用高危漏洞传播病毒
- slam十四讲第二版 pdf_聊聊这两年学习slam啃过的书
- 2020-10-22OpenCV 获取摄像头并显示摄像头视频
- 深度学习笔记一:FCN讲解(转载)
- 三维空间中的旋转矩阵
- APT攻击各阶段简介
热门文章
- android sms 接收短信,Android SMS 短信操作
- 抗渗等级p6是什么意思_抗渗等级P6什么意思?
- curl伪造ip请求
- EntityFramework 的5种状态-简记
- 时间序列分类01:人类活动识别深度学习模型综述
- 新浪微博开放平台站内应用开发流程直播(一)
- Taven教授:解决失眠的好办法
- 小米note4退出google账号
- 【音频处理】Melodyne 网络缩放功能 ( 音符分离线 | 片段分离线 | 窗口滚动条 | 网格缩放 | 修改图像显示位置 | 显示五线谱 )
- C# 中2,10,16进制及其ASCII码之间转化