基于PHP+MYSQL的IP锁定函数

在开发PHP程序有时需要在某段时间内以来访者IP为根据限制来访者的一些动作,例如页面计数已经浏览一次短时间内再浏览就不再计数,投票次数等。
利用PHP+MYSQL可以很好的实现IP锁定,我写了一个这样的IP锁定模块有一定的通用性,以下是数据库的表结构及PHP代码。

iplock.sql

DROP TABLE IF EXISTS iplock;
CREATE TABLE iplock (
  ip varchar(15) DEFAULT '' NOT NULL,
  program varchar(200) DEFAULT '' NOT NULL,
  item varchar(24) DEFAULT '' NOT NULL,
  iplock_time smallint(15) DEFAULT '0' NOT NULL,
  last_time datetime DEFAULT '0000-00-00 00:00:00' NOT NULL,
  counter tinyint(8) DEFAULT '0' NOT NULL,
  PRIMARY KEY (ip,program,item)
)

iplock.inc
<?
function iplock($item,$iplock_time,$counter){

global 
$dbhost,$db;

$ip=$GLOBALS["REMOTE_ADDR"];
$program=__FILE__;

$T_ip='iplock';

$query "delete from $T_ip where now()-last_time>$iplock_time";
$result mysql_db_query($db,$query,$dbhost); //清除过期的记录
ipdb_err();

$query "select counter from $T_ip where ip='$ip' and program='$program' and item='$item'";
$result mysql_db_query($db,$query,$dbhost); 
ipdb_err();

$rows=mysql_num_rows($result);

  if (
$rows==0){
     
$query="insert into $T_ip (ip,program,item,iplock_time,last_time,counter)values('$ip','$program','$item',$iplock_time,now(),1)";
     
$result mysql_db_query($db,$query,$dbhost); 
     
ipdb_err();
     
$r=1;}
  else{
      
$row=mysql_fetch_array($result);
      if(
$row["counter"]<$counter){
        
$query "update $T_ip set last_time=now(),counter=counter+1 where ip='$ip' and program='$program' and item='$item'";
        
$result mysql_db_query($db,$query,$dbhost); 
        
ipdb_err();
        
$r=1;}
      else 
$r=0;
  }
return(
$r);
}

function 
ipdb_err(){
  
$err=mysql_error();
  if(
$err)
     exit(
"<p align=center>数据库发生错误!</p><p align=center>$err</p>");
}

?>

函数的调用不算复杂
$item  (唯一的项目名,为了与其他调用该模块的系统区别)
$iplock_time 锁定该IP时间(单位:秒)
$counter 函数执行n次后锁定该IP