一个简单的每日访客IP统计

<?php
date_default_timezone_set('PRC');
$path='/home/vcap/app/data/7a08c90b-6f63-481f-8f21-b168467261e9';
$date=date('Ymd');
$save=$path.'/save';if(!file_exists($save)){mkdir($save,0777,true);}
$temp=$path.'/temp';if(!file_exists($temp.'/'.$date)){mkdir($temp.'/'.$date,0777,true);}
$addr=$temp.'/'.$date.'/'.md5('&7*ERGS&*hfd$^UR57DG'.$_SERVER['REMOTE_ADDR']);if(!file_exists($save.'/'.$date)){fopen($save.'/'.$date,'w');}
$read=file_get_contents($save.'/'.$date);foreach(array_diff(scandir($temp),array('.','..',$date)) as $sbv){foreach(array_diff(scandir($temp.'/'.$sbv),array('.','..')) as $sbw){unlink($temp.'/'.$sbv.'/'.$sbw);}rmdir($temp.'/'.$sbv);}
if(!file_exists($addr)){file_put_contents($save.'/'.$date,$read+1,LOCK_EX);fopen($addr,'w');}
header('Content-type:text/javascript');echo 'console.log("DailyIP:'.$read.'")';

最近好友委托写一个独立的每日访问IP统计程序,然后就攒了攒之前代码整出这么一团来。主要流程就是:记录每日的访客IP,并写入计数文件,第二天清理之前的。

遇到的主要问题是文件写入冲突,我试了下之前即便用LOCK_EX写入,在访问频繁时一样会造成计数文件被覆盖。后来研究了一下发现问题,应该是和之前的file_get_contents冲突了。之前设定的是如果没有检测到文件就赋值0,但貌似LOCK_EX写入时也是没有文件状态,所以另一个进程的file_get_contents被赋值了0。

改成了现在这样,用fopen创建不存在文件,初步测试没有冲突了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值