php的文件锁,防止对服务器的瞬间爆发访问

思路

1:在当前目录先建立好一个目录 比如名为time.lock

2:设置文件锁时间, limit 比如为1s

3:每次访问服务器时,先判断time.lock是否存在,用file_exists,

这里就有两条线

(1)是第一次访问,那么对于第一次访问,time.lock文件早已经创建

用当前时间-文件的最后修改时间 (这个时间很大) 必然大于limt,则允许访问

但此时touch下timelock这个文件,也就是修改timelock的mtime为当前时间了

(2)这个瞬间,恰好来了第二个访问者

同样要经过判断,当前时间-文件最后修改时间 ,由于这个文件刚刚被修改,那么这个值很小

如果小于自己设置的limit 比如1,那么就不允许访问了,只要此用户刷新后,获得一个较大的(当前时间-文件最后修改时间)值

才能继续访问

 

代码如下

 

 1 $limit //锁的时间
 2 $timelock='time.lock';//锁文件,一个已经预先创建好的文件即可
 3 
 4 //下面开始访问
 5 if(file_exists($timelock)){//需要用到锁,就判断锁文件是否存在
 6     //当前时间 -- 锁文件的mtime 小于 limit
 7     if(time()-filemtime($timelock))<$limit){
 8         echo "服务器忙,请稍后访问"
 9         exit();
10     }
11 }
12 @touch($timelock,time());//touch函数的作用就是修改当前文件的mtime

 

posted on 2014-01-08 20:55  转瞬千年  阅读(365)  评论(0编辑  收藏  举报

导航