一般目标网站的网址连接是这样的样式:

http://localhost/tongji/url.php?wangzhan=piaoliang&r=http://www.taobao.com/

存入数据库:

  1. <?php
  2. header("Content-type: text/html; charset=utf-8");
  3. //echo $_COOKIE['iptag'];
  4. date_default_timezone_set('PRC');
  5. //目标网站url
  6. $aimUrl = $_GET['r'];
  7. //来源网站
  8. $sourceUrl = $_GET['wangzhan'];
  9. //设置cookie标识符,目的是防止当产生cookie后用户在点击其他链接,造成的统计不精确
  10. $cookieTag = $aimUrl.$sourceUrl;
  11. //明天零时的时间戳
  12. $nonce_time = strtotime(date('Ymd')+1);
  13. setcookie('iptag',$cookieTag,$nonce_time);
  14. //获得当前时间,用于数据库查询
  15. $time = date('Y-m-d');
  16. $db = new MySQLi('localhost','a','acyr','www_a_com');
  17. if ($mysqli->connect_errno) {
  18. die('数据库连失败:'.$mysqli->connect_error);
  19. }
  20. $db->query('set names utf8');
  21. $sql = "select * from dede_tongji where sourceUrl='$sourceUrl' and aimUrl='$aimUrl' and date='$time'";
  22. $res = $db->query($sql);
  23. //首先查看现在数据库这一天有没有这个链接的数据,如果没有则创建,否则根据cookie值,来判断IP和Pv的分别增加多少。
  24. if ( $row = $res->fetch_assoc() ){
  25. $pvSum = $row['pvSum'] + 1;
  26. if( $_COOKIE['iptag'] == $cookieTag ){
  27. $sql = "update dede_tongji set pvSum = '$pvSum' where sourceUrl='$sourceUrl' and aimUrl='$aimUrl' and date='$time' ";
  28. $db->query($sql);
  29. //否则只是ip 和pv 增加一
  30. }else{
  31. $ipSum = $row['ipSum'] + 1;
  32. $sql = "update dede_tongji set ipSum = '$ipSum',pvSum = '$pvSum' where sourceUrl='$sourceUrl' and aimUrl='$aimUrl' and date='$time' ";
  33. $db->query($sql);
  34. }
  35. }else{
  36. //数据库中没有则添加一条新数据
  37. $sql = "insert into dede_tongji (sourceUrl,aimUrl,ipSum,pvSum,date) values ('$sourceUrl','$aimUrl',1,1,'$time')";
  38. if( $db->query($sql)){
  39. }else{
  40. $db->error;
  41. }
  42. }
  43. //利用js实现跳转
  44. echo "<script language='javascript'>location.href='".$aimUrl."'</script>";
  45. ?>

从数据库中查询,这里使用到了一个分页类在我的令一片博客里大家可以找到,关于这个分页类的用法 结合这个例子和分页类的成员函数可以很好的理解,主要是在进行数据库查询时sql语句带上 limit 限定条件就可以了,用到的分页类是:page.class.php

下面是从数据库中查询前台显示数据和分页类的使用,还有一些控制日期的js

  1. <?php
  2. header("Content-type: text/html; charset=utf-8");
  3. date_default_timezone_set('PRC');
  4. //引入分页类
  5. require_once 'page.class.php';
  6. //获取变量
  7. $wangzhan = emptyempty($_GET['wangzhan']) ? '' : $_GET['wangzhan'];
  8. //如果月份和日期小于10则加0 用于数据库日期匹配
  9. $mm = $_GET['MM'];
  10. $dd = $_GET['DD'];
  11. if( $mm < 10 ){
  12. $mm = '0'.$mm;
  13. }
  14. if( $dd < 10 ){
  15. $dd = '0'.$dd;
  16. }
  17. $date = $_GET['YYYY'].'-'.$mm.'-'.$dd;
  18. //echo $date;
  19. //$time = date('Y-m-d');
  20. //echo 'time:'.$time.'<br>';
  21. //echo $date;
  22. //exit();
  23. //连接数据库
  24. $db = new MySQLi('localhost','a','acyr','www_a_com');
  25. if ($mysqli->connect_errno) {
  26. die('数据库连失败:'.$mysqli->connect_error);
  27. }
  28. $db->query('set names utf8');
  29. //如果现在的查询日期是当前日期,则全部输出且按日期排序
  30. if($date==$time){
  31. //获得这种情况下的总条数,用于分页显示(分页类要用到这个参数)
  32. $sql = "select count(*) from dede_tongji where sourceUrl='$wangzhan' order by date desc";
  33. $row = $db->query($sql)->fetch_row();
  34. $allRows = $row[0];  //总条数
  35. $pageList = new Page($allRows,2,4,array('pre'=>'上一页','next'=>'下一页'));
  36. //$res = $db->query( "select * from dede_tongji where sourceUrl='$wangzhan' order by date desc {$pageList->limit()}" );
  37. $sql = "select * from dede_tongji where sourceUrl='$wangzhan' order by date desc {$pageList->limit()}";
  38. //echo $sql;
  39. $res = $db->query($sql);
  40. $resArr = array();
  41. while( $row = $res->fetch_assoc()){
  42. $resArr[] = $row;
  43. }
  44. $res->free_result();
  45. /*echo '<pre>';
  46. var_dump($resArr);
  47. foreach( $resArr as $v ){
  48. echo  $v['aimUrl'];
  49. }*/
  50. //print_r($res);
  51. //exit();
  52. }else{
  53. //获得这种情况下的总条数,用于分页显示
  54. $sql = "select count(*) from dede_tongji where sourceUrl='$wangzhan' and date='$date'";
  55. $row = $db->query($sql)->fetch_row();
  56. $allRows = $row[0];  //总条数
  57. $pageList = new Page($allRows,2,4,array('pre'=>'上一页','next'=>'下一页'));
  58. $sql = "select * from dede_tongji where sourceUrl='$wangzhan' and date='$date' {$pageList->limit()} ";
  59. //echo $sql;
  60. $res = $db->query($sql);
  61. $resArr = array();
  62. while( $row = $res->fetch_assoc()){
  63. $resArr[] = $row;
  64. }
  65. $res->free_result();
  66. //print_r($res);
  67. //exit();
  68. }
  69. ?>
  70. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  71. <html xmlns="http://www.w3.org/1999/xhtml">
  72. <head>
  73. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  74. <title>统计结果</title>
  75. <style type="text/css">
  76. /*头部样式*/
  77. .top {
  78. margin-right: auto;
  79. margin-left: auto;
  80. width: 800px;
  81. margin-top: 100px;
  82. }
  83. /*表格样式*/
  84. table td{
  85. border:1px solid #999;
  86. padding:0px 5px;
  87. }
  88. /*分页样式*/
  89. .pagelist{
  90. margin-right: auto;
  91. margin-left: auto;
  92. width: 800px;
  93. margin-top: 30px;
  94. }
  95. .pagelist a{
  96. text-decoration:none;
  97. display:block;
  98. height:auto;
  99. width:auto;
  100. float:left;
  101. padding:1px 6px;
  102. color:#333;
  103. margin-right:5px;
  104. text-align:center;
  105. border:1px solid #CCC;
  106. }
  107. .pagelist a:hover{
  108. color:#F63;
  109. }
  110. .pagelist .alink{
  111. text-align:center;
  112. width:20px;
  113. }
  114. .pagelist strong{
  115. text-decoration:none;
  116. display:block;
  117. float:left;
  118. text-align:center;
  119. width:20px;
  120. padding:1px 6px;
  121. border:1px solid #CCC;
  122. margin-right:5px;
  123. color:#FFF;
  124. background:#666;
  125. }
  126. .pagelist .sel{
  127. width:40px;
  128. }
  129. </style>
  130. </head>
  131. <body>
  132. <div class="top">
  133. <!--下拉框固定焦点-->
  134. <script>
  135. <!--
  136. function fix(){
  137. //alert('ok!');
  138. document.getElementById('wangzhan').options.focus();
  139. }
  140. //-->
  141. </script>
  142. <form method="get" action="tongji.php" style="margin-top:10px;" name='form1'>
  143. 统计网站:<select name="wangzhan" id='wangzhan' οnchange="fix()">
  144. <option value="">--请选择--</option>
  145. <option value="piaoliang" >漂亮网</option>
  146. <option value="piaoliang_n" >漂亮网_频道</option>
  147. <option value="bohe">薄荷网</option>
  148. <option value="jianfen">减肥网</option>
  149. <option value="tianqi">天气网</option>
  150. <option value="nvsheng">女生网</option>
  151. </select>&nbsp;&nbsp;&nbsp;&nbsp;
  152. 查询日期:
  153. <select name='YYYY' onChange="YYYYDD(this.value)">
  154. <option value="" selected='selected'>请选择 年</option>
  155. </select>
  156. <select name='MM' onChange="MMDD(this.value)">
  157. <option value="">选择 月</option>
  158. </select>
  159. <select name='DD'>
  160. <option value="">选择 日</option>
  161. </select>
  162. <input type="submit" value="查询" />
  163. </form>
  164. </div>
  165. <table width="800"  align="center" cellpadding="0" cellspacing="0" style="margin-top:20px; border:1px solid #999;">
  166. <tr style="border:1px solid #999;">
  167. <td width="140" height="25" align="center" bgcolor="#999999" >统计网站</td>
  168. <td width="240" align="center" bgcolor="#999999">出站的连接</td>
  169. <td width="140" align="center" bgcolor="#999999">IP(独立)</td>
  170. <td width="140" align="center" bgcolor="#999999">PV</td>
  171. <td width="140" align="center" bgcolor="#999999">日期</td>
  172. </tr>
  173. <?php foreach ( $resArr as $v ){  ?>
  174. <tr align="center">
  175. <td height="25" ><?php echo $v['sourceUrl'];?></td>
  176. <td><?php echo $v['aimUrl']?></td>
  177. <td><?php echo $v['ipSum']?></td>
  178. <td><?php echo $v['pvSum']?></td>
  179. <td><?php echo $v['date']?></td>
  180. </tr>
  181. <?php }?>
  182. </table>
  183. <div class="pagelist">
  184. <?php
  185. if( $wangzhan != '' && isset($resArr[0])){
  186. echo $pageList->pre(); echo $pageList->first();echo $pageList->strList();
  187. echo $pageList->end();echo $pageList->next();
  188. echo "&nbsp;&nbsp;请选择跳转到第: ";echo $pageList->selectList().' 页';
  189. }
  190. ?>
  191. </div>
  192. <script language="JavaScript">
  193. <!--
  194. function YYYYMMDDstart()
  195. {
  196. MonHead = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
  197. //先给年下拉框赋内容
  198. var y = new Date().getFullYear();
  199. for (var i = (y-3); i < (y+1); i++) //以今年为准,前30年,后30年
  200. document.form1.YYYY.options.add(new Option(" "+ i +" 年", i));
  201. //赋月份的下拉框
  202. for (var i = 1; i < 13; i++)
  203. if( i < 10 ){
  204. /*如果是小于10的数,则加上0和日期匹配,下面的天数是一样*/
  205. document.form1.MM.options.add(new Option("0" + i + " 月", i));
  206. }else{
  207. document.form1.MM.options.add(new Option("" + i + " 月", i));
  208. }
  209. document.form1.YYYY.value = y;
  210. document.form1.MM.value = new Date().getMonth() + 1;
  211. var n = MonHead[new Date().getMonth()];
  212. if (new Date().getMonth() ==1 && IsPinYear(YYYYvalue)) n++;
  213. writeDay(n); //赋日期下拉框Author:meizz
  214. document.form1.DD.value = new Date().getDate();
  215. }
  216. if(document.attachEvent)
  217. window.attachEvent("onload", YYYYMMDDstart);
  218. else
  219. window.addEventListener('load', YYYYMMDDstart, false);
  220. function YYYYDD(str) //年发生变化时日期发生变化(主要是判断闰平年)
  221. {
  222. var MMvalue = document.form1.MM.options[document.form1.MM.selectedIndex].value;
  223. if (MMvalue == ""){ var e = document.form1.DD; optionsClear(e); return;}
  224. var n = MonHead[MMvalue - 1];
  225. if (MMvalue ==2 && IsPinYear(str)) n++;
  226. writeDay(n)
  227. }
  228. function MMDD(str) //月发生变化时日期联动
  229. {
  230. var YYYYvalue = document.form1.YYYY.options[document.form1.YYYY.selectedIndex].value;
  231. if (YYYYvalue == ""){ var e = document.form1.DD; optionsClear(e); return;}
  232. var n = MonHead[str - 1];
  233. if (str ==2 && IsPinYear(YYYYvalue)) n++;
  234. writeDay(n)
  235. }
  236. function writeDay(n) //据条件写日期的下拉框
  237. {
  238. var e = document.form1.DD; optionsClear(e);
  239. for (var i=1; i<(n+1); i++)
  240. if( i < 10 ){
  241. e.options.add(new Option("0"+ i + " 日", i));
  242. }else{
  243. e.options.add(new Option(""+ i + " 日", i));
  244. }
  245. }
  246. function IsPinYear(year)//判断是否闰平年
  247. { return(0 == year%4 && (year%100 !=0 || year%400 == 0));}
  248. function optionsClear(e)
  249. {
  250. e.options.length = 1;
  251. }
  252. //--></script>
  253. </body>
  254. </html>

最后还有就是数据库表的结构,这样只有一张表 在pv记录上还有一些小误差,因为这里主要是用 cookie控制的时间,所以有误差 如果有高手可以优化数据库设计用ip来控制,能力有限,望大家见谅:

  1. CREATE TABLE `dede_tongji` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `sourceUrl` varchar(255) NOT NULL, `aimUrl` varchar(255) NOT NULL, `ipSum` int(10) unsigned NOT NULL, `pvSum` int(10) unsigned NOT NULL, `date` date NOT NULL,

转载于:https://blog.51cto.com/guozusong/1075308

php实现从本网站每天出站连接向目标网站贡献的IP和PV的统计相关推荐

  1. 怎么找到网站的出站链接及删除修改?

    出站链接是向外的链接(outbound link),从你的网页链出去的超链接,链到互联网上的不同页面,也叫导出链接. 网站上往往都会有一些其他网站的链接,有的是友情链接,有的是因为网站功能需求的链接, ...

  2. 该网站服务器出错了怎么回事,该网站服务器出错了是什么意思(图文)

    [导读]该网站服务器出错了是什么意思,下面就是191路由网整理的网络知识百科,来看看吧! 大家好,我是191路由器网小编,上述问题将由我为大家讲解. 以网络为例,该网站服务器出错了的意思是指互联网数据 ...

  3. 什么是独立站与独立网站?独立站在国内市场的萌芽与发展态势

    1 什么是独立站与独立网站? 独立站区别于独立网站,是两个不同概念.独立网站诞生于internet早期,www协议诞生后,互联网上便诞生了第一批独立网站.独立站是相对于电商平台而言的,独立网站的方式不 ...

  4. 网站如何做站外优化?

    网站如何做站外优化? 网站优化推广,心态极为重要,平时多发布一些原创性文章,多多引流.持续外链发布,友情链接交换,没事阅读一些SEO知识方面的文章,开开心心的优化网站,不要天天想着SEO,尊重百度搜索 ...

  5. 部分网站为什么上不去_企业网站如何霸占搜索引擎首页

    很多人都知道,企业搭建好官网后需要有流量,有人关注,才能够算得上是搭建官网的意义.不然,搭建官网只能够说做了个动作,毫无意义. 官网要有流量,就需要去做网站推广,网站推广其实也就是在做seo官网优化. ...

  6. WordPress自动采集发布文章01-使用火车头采集目标网站

    火车头采集目标网站有什么好处 火车头采集目标网站有什么好处呢? 它会根据我们指定的网站进行采集,采集到的内容和我们网站的内容相关性高. 为什么不用站群软件采集呢?站群软件和火车头采集的方式不一样,站群 ...

  7. 首次成功实施 XSS 攻击,盗取目标网站大量 VIP 帐号

    前言 之前做网站时有做代码防御 XSS(Cross Site Script) 攻击,但是却只处于了解的阶段,并不知道其中具体的原理,更别说使用了.最近有朋友要求我帮助他 Hack 一个网站,达到一定的 ...

  8. linux出站入站端口维护,linux下如何用iptables开放指定端口_网站服务器运行维护,linux,iptables,端口...

    win10系统老是弹出垃圾广告怎么办_网站服务器运行维护 win10系统老是弹出垃圾广告的解决方法是:1.打开控制面板,进入Internet选项:2.在打开的Internet属性窗口中,切换到[隐私] ...

  9. oracle 树状结构一直出现不了_SEO站内优化:网站结构优化(十一)

    上文已经对搜索引擎排名机制,以及影响关键词排名的因素进行了全面的讲解,详情查阅SEO入门到精通(十):搜索引擎的排名机制.本文主要讲解站内优化中最为重要的"网站结构优化",为什么说 ...

最新文章

  1. 微信小程序把缓存的数组动态渲染到页面
  2. 华为将发布世界首款人工智能原生数据库
  3. Java中泛型的各种使用
  4. 自噬相关数据库Human Autophagy Database使用指南
  5. mysql db compare_数据传输 | mysqldiff/mysqldbcompare 实现 DTLE 自动化测试
  6. 4.14Python数据处理篇之Matplotlib系列(十四)---动态图的绘制
  7. nx set 怎么实现的原子性_【redis进阶(1)】redis的Lua脚本控制(原子性)
  8. Nginx做web服务器linux内核参数优化
  9. CF626F. Bear and Fair Set
  10. AngularJS控制器和过滤器学习(三)
  11. lodop同一页面一次性打印多次
  12. CMM术语表详细说明
  13. Idea 格式化代码-配置
  14. 基于遗传算法的柔性流水车间调度设计与实现(论文+源码+答辩ppt)
  15. Jill Rides Again UVA - 507(求最大子序列和)
  16. 微信小程序之实现层叠轮播图的效果案例(前端学习收藏夹必备)
  17. 第五十八章 SQL函数 FLOOR
  18. Connect internal only, until freed错误处理
  19. 漂泊者乐园资源分享_有声英语书_BlABook0038_The Night Crew
  20. icpc 北京赛区总结

热门文章

  1. python 输出list到txt_python脚本生成caffe train_list.txt的方法
  2. 根据成交量变化寻找黑马
  3. 马斯克辞任董事长,罚款2000万美元,钢铁侠一夜服软
  4. 教你三种Model(AR)中自定义验证规则的方法
  5. 打造SpringBootTemplate(SpringBoot项目的模版)
  6. 一次openresty http.lua 性能调优之旅
  7. lucene bug的报告经历
  8. web 页面table 斜线效果 跨越多行和 多列
  9. SCCM 2012 R2 从入门到精通 Part8 软件部署
  10. javaSE-基础篇-经典赋值:两变量值的交换