个人写的网页计数器,可以统计访问IP次数与网页总访问次数

时间:2021-11-06 14:50:03
<?
$link=mysql_connect('localhost','root','123456')or die("could not connect :".mysql_error());//连接数库
mysql_select_db("erp") or die("could not select database");//选择数据库
?>
<? $iipp=$_SERVER['REMOTE_ADDR'];//获取当前链接用户IP地址
$iptime=date("Y-m-d H:i:s");//攻取当前访问的时间
$sqlstr="select * from ipaddr where ip='$iipp'";//查寻此IP地址是否已经入库存 ipaddr是数据库的表名,ip字段记载IP地址
$result=mysql_query($sqlstr,$link);//执行查寻ip=$iipp查寻
$row=mysql_fetch_array($result,MYSQL_BOTH);//获取ipaddr的查寻结果
if ($row[ip]){//判断IP地址是否存在
$subtime=(strtotime($iptime)-strtotime($row[iptime]))/60;//页面最新时间与ipaddr入库的ip时间相减的结果,除以60秒,计算结果为分钟.
//echo $subtime."<br>";
$setsubtime=10;//间隔时间(分钟)
//echo $subtime; 测试时间
if($subtime>$setsubtime){//比较间隔时间结果
  $degree=$row[degree]+1;//ipaddr表中的计算器+1的结果送往计数器
  $query="update ipaddr set iptime='$iptime',degree='$degree' where ip='$iipp'";//给每个IP一个计数器,入库后iptime为最新时间
  $resultipaddr=mysql_query($query,$link);//执行入库
  $sqlstrcounter="select counter from ipcounter where ipenter='ip'";//查寻ipcounter表中字段ipenter等于'ip'的结果
  $resultcounter=mysql_query($sqlstrcounter,$link);//执行查寻
  $row=mysql_fetch_array($resultcounter,MYSQL_BOTH);//获得ipcounter表中的数据.
  $counter=$row[counter]+1;//ipcounter中的counter字段值增加1,也就是访问网页的次数加1
  $sqlstrcounter="update ipcounter set counter=$counter where ipenter='ip'";//网页访问次数修改为最新访问次数
  $resultcounterinto=mysql_query($sqlstrcounter,$link);//执行修改次数
  mysql_free_result($result);//释放ipaddr表内存
  mysql_free_result($resultcounter);//释放ipcounter表内存
  mysql_close($link);//关闭数据库
  }
  else{
  $degree=$row[degree];//统计IP地址访问次数
  $sqlstrcounter="select counter from ipcounter where ipenter='ip'";//查寻ipcounter表中字段ipenter等于'ip'的结果
  $resultcounter=mysql_query($sqlstrcounter,$link);//执行查寻
  $row=mysql_fetch_array($resultcounter,MYSQL_BOTH);//获得ipcounter表中的数据.
  $counter=$row[counter];//ipcounter中的counter字段值增加1,也就是访问网页的次数加1
  mysql_free_result($resultcounter);////释放ipcounter表内存
  mysql_free_result($result);//释放ipaddr表内存
  mysql_close($link);//关闭数据库
  }
}
else{
$degree=1;//第一次访问的IP地址,计算器准备加1
$query="insert into ipaddr(serial,ip,iptime,degree) VALUES('','$iipp','$iptime','$degree')";//插入一条刚刚访问IP地址的入库
$resultipaddr=mysql_query($query,$link);//执行插入结果
$sqlstrcounter="select counter from ipcounter where ipenter='ip'";//查寻counter表中的字段ipenter为'ip'的结果.
$resultcounter=mysql_query($sqlstrcounter,$link);//执行查寻
$row=mysql_fetch_array($resultcounter,MYSQL_BOTH);//获取counter结果
$counter=$row[counter]+$degree;//对第一次的访问的IP计算器加1,写入数据库
$sqlstrcounter="update ipcounter set counter=$counter where ipenter='ip'";//修改计数器结果
$resultcounterinto=mysql_query($sqlstrcounter,$link);//执行操作
mysql_free_result($result);//释放ipaddr表内存
mysql_free_result($resultcounter);//释放ipcounter表内存
mysql_close($link);//关闭数据库
}
?>

表1:
-- phpMyAdmin SQL Dump
-- version 2.9.0.2
-- http://www.phpmyadmin.net
-- 
-- 主机: localhost
-- 生成日期: 2007 年 06 月 06 日 14:54
-- 服务器版本: 5.0.24
-- PHP 版本: 5.1.6
-- 
-- 数据库: 'erp'
-- 
-- --------------------------------------------------------
-- 
-- 表的结构 'ipaddr'
-- 
CREATE TABLE ipaddr (
  `serial` int(10) unsigned NOT NULL auto_increment,
  ip varchar(15) NOT NULL,
  iptime datetime NOT NULL,
  degree tinyint(8) unsigned NOT NULL,
  PRIMARY KEY  (`serial`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;
-- 
-- 导出表中的数据 'ipaddr'
-- 
表2:
-- phpMyAdmin SQL Dump
-- version 2.9.0.2
-- http://www.phpmyadmin.net
-- 
-- 主机: localhost
-- 生成日期: 2007 年 06 月 06 日 14:57
-- 服务器版本: 5.0.24
-- PHP 版本: 5.1.6
-- 
-- 数据库: 'erp'
-- 
-- --------------------------------------------------------
-- 
-- 表的结构 'ipcounter'
-- 
CREATE TABLE ipcounter (
  counter int(10) unsigned NOT NULL,
  ipenter varchar(2) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

10 个解决方案

#1


嗯~不错,收下...........

#2


路过

#3


收藏

#4


我觉得不好.你没考虑到页面的效率问题.当很多人访问这个页面,会很慢..你要查数据库以及更新字段....这样不好.建议读取apache日志的方法...

#5


很认真,很仔细,没考虑实际应用,抱歉。

#6


不错,对访问量不大的网站,还是可以的。

#7


数据库表缺少索引
另外代码可否封装一下,逻辑看得不是很清楚。

#8


楼上几位分析的也有理,对小网站还是不错的

#9


顶一个

#10


收藏了

#1


嗯~不错,收下...........

#2


路过

#3


收藏

#4


我觉得不好.你没考虑到页面的效率问题.当很多人访问这个页面,会很慢..你要查数据库以及更新字段....这样不好.建议读取apache日志的方法...

#5


很认真,很仔细,没考虑实际应用,抱歉。

#6


不错,对访问量不大的网站,还是可以的。

#7


数据库表缺少索引
另外代码可否封装一下,逻辑看得不是很清楚。

#8


楼上几位分析的也有理,对小网站还是不错的

#9


顶一个

#10


收藏了