하나같이 Agent,레퍼값,... 등등 여러 쓸때없는 데이터까지 저장하기에 간단한걸 찾다
결국 포기하고 만들게 되었습니다.
* 최근 1주일까지는 일별 카운터를 저장하며, 전체 카운터도 저장합니다.
* DB 를 사용하지 않음으로써 DB Connection 시 발생하는 부하가 없습니다.
* 파일명을 바꿈으로써 멀티카운터로 응용할수 있습니다.
* 실제 데이터 파일은 아래와 같습니다.
10^93577^2007/08/31^7131^2007/08/30^8455^2007/08/29^8467^2007/08/28^8940^
2007/08/27^8688^2007/08/26^8797^2007/08/25^7891^
* 아래는 kcount.php 로 저장
<?
///////////////////////////////////////////////////////////
// 파일 카운터
// 2007년 8월 26일
// 오길호(prince@kilho.net, http://www.kilho.net )
///////////////////////////////////////////////////////////
function kcount($filename,&$todaycount,&$totalcount)
{
$today=date('Y/m/d', time());
if(!file_exists($filename))
{
$dat[0]=1;
$dat[1]=1;
$dat[2]=$today;
$dat[3]=1;
for($i=0;$i<6;$i++)
{
$dat[($i*2+4)]='-';
$dat[($i*2+5)]=0;
}
}else
{
$fp = fopen($filename,'r');
if(flock( $fp, LOCK_EX ))
{
$buf = fread($fp,filesize($filename));
$old = explode('^',$buf);
if($old[2]==$today)
{
for($i=0;$i<16;$i++)$dat[$i]=$old[$i];
$dat[1]++;
$dat[3]++;
}else
{
for($i=2;$i<14;$i++)$dat[$i+2]=$old[$i];
$dat[0]=$old[0]+1;
$dat[1]=$old[1]+1;
$dat[2]=$today;
$dat[3]=1;
}
flock( $fp, LOCK_UN );
}
fclose($fp);
}
$fp = fopen($filename,'w');
if(flock( $fp, LOCK_EX ))
{
for($i=0;$i<16;$i++)fwrite($fp,$dat[$i].'^');
flock( $fp, LOCK_UN );
$result=true;
}else{
$result=false;
}
fclose($fp);
$totalcount=$dat[1];
$todaycount=$dat[3];
return $result;
}
?>
* 아래는 임시파일?! 사용할 파일....
<?
include 'kcount.php';
// test.cnt <- 처음실행시 파일 생성후, 속성을 707 로 해야함!
kcount('test.cnt',$todaycount,$totalcount);
echo '오늘카운터:'.$todaycount.'<br />';
echo '전체카운터:'.$totalcount.'<br />';
?>
새댓글
전체보기