免费注册网站空间h5特效网站欣赏

当前位置: 首页 > news >正文

免费注册网站空间,h5特效网站欣赏,网络销售管理条例,wordpress工业模板闲来无事写个简易网站流量统计插件: 开发涉及到: php mysql js html效果看下图的第三行 webpro统计|今日IP[1]|今日PV[9]|昨日IP[0]|昨日PV[0]|当前在线[4] 简易的流量统计插件#xff0c;数据大致参考即可#xff0c;没有高级算法#xff0c;仅统计下IP和PV 不防刷 webpro统计|今日IP[1]|今日PV[9]|昨日IP[0]|昨日PV[0]|当前在线[4] 简易的流量统计插件数据大致参考即可没有高级算法仅统计下IP和PV 不防刷用软件数据分分钟刷上去 插件非常轻对网站加载速度影响大概在30ms左右 一、统计数据分析 今日IP 今日PV 昨日IP 昨日PV 当前在线 二、计算方法 1、如何准确获取到客户端IP 统计IP需要获取到客户端真实的IP地址仅js实现效果并不好。在这里我采用了[搜狐]的接口: 将该标签嵌入到网页访问结果如下: var returnCitySN {cip: 223.241.141.73, cid: 340000, cname: 安徽省}; 直接给我们返回了一个 returnCitySN 对象我们可以获得准确的IP地址、cid(cid是什么给我留言)、地区 通过如下js我们获取到ip、cnamevar ip  returnCitySN.cip; var cname  returnCitySN.cname; 至此IP已经拿到。 2、后端记录方法 前端将IP、cname、访问的url传输到服务端服务器端生成time(时间戳)将以下数据存储 表wnzz_visit:id自动编号int11 ipip地址varchar128 cname地区varchar255 url访问地址varchar255 time访问时间戳int11 siteid统计站点编号int11 我们在最后又添加了一个字段 siteid用来标记和区分不同的站点这样可以实现多站点统计只需要确保siteid不重复即可 表wnzz_cal: 该表的作用是当某一天已经过去时自动计算某一天IP和PV总值记录在这个表中 为什么需要这个表因为当日统计的IP和PV都是动态计算的php从数据库读出所有访问的数据然后再对数据进行统计如此方法加大了服务器的开销所以对于一些不必要的重复计算我们计算一次存储其即可下次需要直接读取。id自动编号int11 timestamp某一天0点的时间戳int11 timestr某一天用字符表示例如2019-05-05varchar255 ipsIP总数int11 pvsPV总数int11 siteid统计站点编号int11 3、如何计算IP、PV 首先需要确认 siteid 和统计事件的区间://设置北京时间为默认时区 date_default_timezone_set(PRC); // 现在的时间戳 \(now  time(); // 现在对应今日0点的时间戳 \)today  strtotime(date(Y-m-d), \(now); // 现在对应昨日0点的时间戳 \)yesterday  \(today - 86400; // 现在对应明日0点的时间戳 \)tomorrow  \(today  86400; 我们动态统计一下今天的数据即 todaytime SELECT * FROM wnzz_visit WHERE time{\)today} AND time \(res_t  \)bean-findByX([ip], wnzz_visit, [time{\(today}, time 从数据库读出的数据形如如下: datas[ [ip127.0.0.1], [ip127.0.0.1], [ip127.0.0.1], [ip127.0.0.2], [ip127.0.0.2], [ip127.0.0.2], [ip127.0.0.3] ] 用PHP代码表示一下/** * return array(ips, pvs) */ function cal_ipandpv(\)datas){ // echo emmm; // print_r(\(datas); // \)ip[192.168.1.1]  10; \(ip  array(); foreach(\)datas as \(index  \)item){ if(array_key_exists(\(item[ip], \)ip)){ // 统计过 \(ip[\)item[ip]]  1; }else{ // 没统计过 \(ip[\)item[ip]]  1; } } // 累加IP和PV \(ips  0; \)pvs  0; foreach(\(ip as \)keyip  \(count){ \)ips; \(pvs  \)count; } return [\(ips, \)pvs]; } 4、如何计算online数 访问记录在十分钟以内的即算作在线\(onlineMin  \)now - 10 * 60; 直接列上SQL语句SELECT * FROM wnzz_visit WHERE time{\(onlineMin } AND siteid{\)siteid}; 三、代码实现 JS插件端 在这之前需要引用 通过这个插件我们可以在 id 为 wnzz 和 wnzz1 的div中显示返回信息 domain1改成自己服务器接口地址// https://pv.sohu.com/cityjson?ieutf-8 var domain1  http://127.0.0.1/vsCode/wnzz/; var url  window.location.href; var siteid  1000; \(.get(domain1  ?ip  returnCitySN[cip]  cname  returnCitySN[cname]  url  url  siteid  siteid, function(result){ console.log(result); }); \).get(domain1  ?actgetsiteid  siteid, function(result){ \((#wnzz).text(result); \)(#wnzz1).text(result); }); PHP后端 在这之前需要引用 Bean.class.php、Tools.class.php 下载之后直接引用即可 以下为wnzz服务端接口?php //  // //                              // //        数据库参数配置         // //                              // //  // define(DB_HOST, 127.0.0.1);   // 数据库地址 define(DB_USER, root);        // 数据库用户名 define(DB_PASSWD, root);      // 数据库密码 define(DB_NAME, wnzz);        // 数据库名 //设置北京时间为默认时区 date_default_timezone_set(PRC); //输出当前时间 // echo date(Y-m-d H:i:s,time());  //2016-08-11 10:30:32 //获得当日凌晨的时间戳 // \(today  strtotime(date(Y-m-d),time()); require_once ./Tools.class.php; require_once ./Bean.class.php; /** * ip * cname * url * siteid */ /** siteid 1000-1999 我的字段 */ // 存储访客数据 if(isset(\)_GET[ip])  isset(\(_GET[cname])  \)_GET[url]  \(_GET[siteid]){ \)ip  anti_sqlin(\(_GET[ip]); \)cname  anti_sqlin(\(_GET[cname]); \)url  anti_sqlin(\(_GET[url]); \)siteid  (int)\(_GET[siteid]; \)bean  new Bean(); // 现在的时间戳 \(now  time(); // 存储 \)bean-save(wnzz_visit, [ip{\(ip}, cname{\)cname}, url{\(url}, time{\)now}, siteid{\(siteid}]); // 获取访问记录 }elseif(isset(\)_GET[act])  \(_GET[act]  get  isset(\)_GET[siteid])){ \(siteid  (int)\)_GET[siteid]; // init \(y_ips  0; \)y_pvs  0; \(t_ips  0; \)t_pvs  0; \(online  0; \)bean  new Bean(); // 现在的时间戳 \(now  time(); // 现在对应今日0点的时间戳 \)today  strtotime(date(Y-m-d), \(now); // 现在对应昨日0点的时间戳 \)yesterday  \(today - 86400; // 现在对应明日0点的时间戳 \)tomorrow  \(today  86400; // 查找昨天的记录 \)res  \(bean-findByX([timestr, ips, pvs], wnzz_cal, [timestamp{\)yesterday}, siteid{\(siteid}]); if(\)res[status]  data){ // 有数据直接读 \(y_ips  \)res[data][0][ips]; \(y_pvs  \)res[data][0][pvs]; }else{ // 计算并存储 \(res_m  \)bean-findByX([ip], wnzz_visit, [time{\(yesterday}, time \)datas  \(res_m[data]; \)ipsandpvs  cal_ipandpv(\(datas); // 存储 // \)ips // \(pvs // \)yesterday // \(yesterday_timestamp \)ips  \(ipsandpvs[0]; \)pvs  \(ipsandpvs[1]; \)yesterday_timestamp  date(Y-m-d, \(yesterday); \)y_ips  \(ips; \)y_pvs  \(pvs; \)res1  \(bean-save(wnzz_cal, [ips{\)ips}, pvs{\(pvs}, timestamp{\)yesterday}, timestr{\(yesterday_timestamp}, siteid{\)siteid}]); // print_r(\(res1); } // 查找今天的记录 \)res_t  \(bean-findByX([ip], wnzz_visit, [time{\)today}, time \(datas_t  \)res_t[data]; \(ipsandpvs_t  cal_ipandpv(\)datas_t); \(ips_t  \)ipsandpvs_t[0]; \(pvs_t  \)ipsandpvs_t[1]; \(t_ips  \)ips_t; \(t_pvs  \)pvs_t; // 获取当前在线10min内为在线 // 用PV计算当前在线数 \(onlineMin  \)now - 600; \(res_o  \)bean-findByX([ip], wnzz_visit, [time{\(onlineMin}, siteid{\)siteid}]); \(datas_o  \)res_o[data]; \(ipsandpvs_o  cal_ipandpv(\)datas_o); \(ips_o  \)ipsandpvs_o[0]; \(pvs_o  \)ipsandpvs_o[1]; // \(t_ips  \)ips_o; \(online  \)pvs_o; // \(y_ips  0; // \)y_pvs  0; // \(t_ips  0; // \)t_pvs  0; // \(online  0; echo webpro统计|今日IP[{\)t_ips}]|今日PV[{\(t_pvs}]|昨日IP[{\)y_ips}]|昨日PV[{\(y_pvs}]|当前在线[{\)online}]; } /** * return array(ips, pvs) */ function cal_ipandpv(\(datas){ // echo emmm; // print_r(\)datas); // \(ip[192.168.1.1]  10; \)ip  array(); foreach(\(datas as \)index  \(item){ if(array_key_exists(\)item[ip], \(ip)){ // 统计过 \)ip[\(item[ip]]  1; }else{ // 没统计过 \)ip[\(item[ip]]  1; } } // 累加IP和PV \)ips  0; \(pvs  0; foreach(\)ip as \(keyip  \)count){ \(ips; \)pvs  \(count; } return [\)ips, \(pvs]; } function anti_sqlin(\)data){ \(data  str_replace(, , \)data); return \(data; } HTML文档页面安装 在head代码处添加、或者有的网站后台管理中留有网站统计填写等合适位置添加如下代码 xxx/xxx.js改成自己的服务器上的JS地址 然后在你需要显示统计数据的地方添加如下div标签 如果你有两处需要显示可以修改下JS插件代码增加一条语句即可\)(#wnzz1).text(result); 插件测试 安装好后刷新网站进行测试 安装成功 如果想实现多用户自己做个siteid管理即可从而避免siteid重复导致数据混乱。