プロが教えるわが家の防犯対策術!

今、1日毎のアクセスカウンターを作成しています。
それで早速質問なんですが日付を過ぎたら自動的に今日のアクセス人数をクリア(ゼロ)にするやり方を教えてほしいのです。

今の状況は日付を過ぎても次のアクセスがない限りcount.txt(ログファイル)の中身にはアクセス数値が残ったままなので日付が変わったら自動でcount.txtの中身を0(ゼロ)にしたいのです。

そのやり方が分からなくて困っているのですが、どうやればいいのでしょうか?

宜しくお願い致しますm(_ _)m

A 回答 (3件)

わたしは、logファイルを


2009-Feb-04 22:06:49 (Thu)
 total   : 12896
 2006   : 5893
 200606  : 26
 2006154  : 10
 20060604 : 10
という感じで保存させてます。ログファイルは何種類かあって、それらを呼び出ししたときに指定される。
こうしておけば、CGI側で任意のカウントデータを利用できますよ。
Lacoocan用アクセスカウンター(LaCounter.cgi):マニュアル ( http://iruka.la.coocan.jp/cgi/counter/LaCounter. … )

この回答への補足

お返事ありがとうございます★
カウンタの中身を0にする っと言った関数?は何を使えば宜しいのでしょうか?(>_<)無知ですみません!宜しければ教えてくださいm(_ _)m

以下ソースです。
#!/usr/bin/perl

# ログファイル
$logfile = 'count.txt';

$tm = time;
($mday) = (localtime($tm))[3];

#アクセス数を読み込む
open(IN, "$logfile");
$total = <IN>;
$day = <IN>;
close(IN);

# トータルに1足す
chop $total;
$total++;

($dcount,$fmday) = split(/<>/,$day);
if($fmday != $mday) {
$dcount = 1;# 日付が変わっていればカウントを1にする
} else {
$dcount++;
}
$day = "$dcount<>$mday";

open (OUT,">$logfile");
print OUT $total,"\n",$day;
close(OUT);

print <<EOL;
print "Content-type: text/html"
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS">
</head><body>
今日のカウント数は、$dcountです。<br>
これまでのトータル、は$totalです。<br>
</body>
</html>
EOL

補足日時:2009/02/14 02:02
    • good
    • 0

>今の状況は日付を過ぎても次のアクセスがない限りcount.txt(ログファイル)の中身にはアクセス数値が残ったままなので日付が変わったら自動でcount.txtの中身を0(ゼロ)にしたいのです。



これは、アクセスしなくても0に戻すと言う意味です。
これをするには、CGIでやるよりもサーバで常駐タスクを設定し、日付が変わるごとに0に戻すと言うやり方がよいと思います。
ただ、見ている人がいない場合0でもそうじゃなくても特に意味はないので、日付が変わって最初にアクセスしたときに0にすればいいと思いますが。

記録ファイルが count.txtのみならば、カウントアップするときにカウントアップする日付を一緒に記録し、日付が違う場合に0に戻せばいいと思います。

表題をクリアできればいいだけならば、一般的な日毎のカウントをするカウンタを設置して、全体数を表示しないで、本日のカウントのみを表示すればいいと思います。

この回答への補足

ご連絡遅くなりましたm(_ _)mすいません。

回答ありがとうございます。
実は今、URL毎(AのURL・BのURL...)にクリックされたらアクセスカウンターを記録していて、そのURLのアクセス順にランキングも付けているのです。
それを例えば、1週間経ったら自動ですべてのURLのアクセスカウンターを0に戻したいとの事なのですが、上記の方法でも可能でしょうか?

宜しくお願い致します。

補足日時:2009/02/20 16:55
    • good
    • 0

ログファイルをどのような形式で保存しているかを把握しないとログファイルの読み込みやカウントやリセットは出来ないです。


 ざっと見たところ
・・・【中略】・・・
open(IN, "$logfile");
$total = <IN>; #-----------
$day = <IN>; #----------- 同じものを入れている?
close(IN);
・・・【中略】・・・
chop $total; #----------- \d+ この後、出てこない?
$total++;
・・・【中略】・・・
($dcount,$fmday) = split(/<>/,$day); #----------- \d+<>\d{1}?
if($fmday != $mday) {
・・・【中略】・・・
$day = "$dcount<>$mday"; #----------- \d+<>\d{1}?
・・・【中略】・・・
open (OUT,">$logfile");
print OUT $total,"\n",$day;
close(OUT);
と、まったく不統一ですよ。
while(<IN>{ #標準入力を順番に処理
  chonp;
  if( /\d+<>\d{1}/ ){ $day=$_;}
  elsif(/^\d+$/){ $total=$_;}
}
とかの、場合わけが必要になる。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!