• ベストアンサー

カウントを1日毎に0にする方法【CGI編】

今、1日毎のアクセスカウンターを作成しています。 それで早速質問なんですが日付を過ぎたら自動的に今日のアクセス人数をクリア(ゼロ)にするやり方を教えてほしいのです。 今の状況は日付を過ぎても次のアクセスがない限りcount.txt(ログファイル)の中身にはアクセス数値が残ったままなので日付が変わったら自動でcount.txtの中身を0(ゼロ)にしたいのです。 そのやり方が分からなくて困っているのですが、どうやればいいのでしょうか? 宜しくお願い致しますm(_ _)m

  • k925
  • お礼率2% (5/167)
  • CGI
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

わたしは、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.html )

k925
質問者

補足

お返事ありがとうございます★ カウンタの中身を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

その他の回答 (2)

  • moon_night
  • ベストアンサー率32% (598/1831)
回答No.3

>今の状況は日付を過ぎても次のアクセスがない限りcount.txt(ログファイル)の中身にはアクセス数値が残ったままなので日付が変わったら自動でcount.txtの中身を0(ゼロ)にしたいのです。 これは、アクセスしなくても0に戻すと言う意味です。 これをするには、CGIでやるよりもサーバで常駐タスクを設定し、日付が変わるごとに0に戻すと言うやり方がよいと思います。 ただ、見ている人がいない場合0でもそうじゃなくても特に意味はないので、日付が変わって最初にアクセスしたときに0にすればいいと思いますが。 記録ファイルが count.txtのみならば、カウントアップするときにカウントアップする日付を一緒に記録し、日付が違う場合に0に戻せばいいと思います。 表題をクリアできればいいだけならば、一般的な日毎のカウントをするカウンタを設置して、全体数を表示しないで、本日のカウントのみを表示すればいいと思います。

k925
質問者

補足

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

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

ログファイルをどのような形式で保存しているかを把握しないとログファイルの読み込みやカウントやリセットは出来ないです。  ざっと見たところ ・・・【中略】・・・ 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=$_;} } とかの、場合わけが必要になる。

関連するQ&A

  • PHPのアクセスカウンターのバグについてです!

    PHPを勉強しているものですが アクセスカウンターをネットで調べ自分なりに書いたのですが 日にちが変わるとトータル、今日、昨日が全く動かなくなります。 どこをどうすればいいのか教えていただけないでしょうか? お願いします。 $txt='counter.txt'; $fp=fopen($txt,'r+'); if($fp!==false){ if(flock($fp,LOCK_EX)){ $counter=fgets($fp);//トータル 今日 昨日 日付 $count=explode(' ',$counter); if(date('j') != $count[3]){ $count[3]=date('j'); $count[2]=$count[1]; $count[1]=0; } $count[0]++; $count[1]++; $counter=implode(' ',$count); rewind($fp); fputs($fp,$counter); flock($fp,LOCK_UN);} } fclose($fp); ちなみにバグはトータル→今日→昨日→日付の順です。 500 1 1 262625 のようになっていました。 よろしくです。

    • ベストアンサー
    • PHP
  • 同一日付を1とカウントする方法。

    日報から月報を作成しています、日報は1生産ラインで1品種毎に発行されます。従って同じ日に3品種生産した時は3枚の日報となります。日報を張り付けるとINDIRECT関数で月報のシートにコピーされます。月報は1品種 1行に収まるようになっています。今は月報の日付欄には日報1の行にだけ手入力で入れ、日付列の最終列でCOUNTしています。手入力を省きたいのですが日付をDIRECT関数でコピーすると日付列に日報の枚数分同一日付が並びます、同一日付を1 とカウントさせる方法を教えて下さい。

  • 文字列をカウントするにはどうすればいいのでしょうか?

    ファイル読み込み後その中の特定の文字列、「映画」の個数をカウントするというプログラムを次のように作ってみましたが、実際に起動してみるとエラーになります。何かわかる方がいれば教えてください。 #!/usr/local/bin/perl if (open(FH, "data/log.txt")) { @file = <FH>; close(FH); } foreach $count (@file){ $count = ($line =~ tr/映画/映画/); } print $count; exit;

    • ベストアンサー
    • CGI
  • HPのカウンターをカウントさせない方法ご存知ですか?

    以前HPを作っている友人が 「自分の家と大学経由で俺のHPに来た場合はカウンターが動かないようにしている」 というのを聞いたことがありました。 現在自分でもHP作成してみようと思い、少しやりかけているのですが、 私自身がアクセスすることでカウンターの数値が上がるというのをできないようにしたいのです。 こちらのサイトご覧になっている方でご存知の方いらっしゃいましたら 回答・アドバイスよろしくお願いいたします。 (上記の事を言っていた友人と連絡が取れないのです;) またこのような方法がレンタルのカウンタでも可能かについても教えてください。

  • クリック数を1日ごとにカウントしたいです。

    どうか教えてください。 画像やボタンなどをクリックした時に、その(トータルの累計の)数を画像やボタンの横に表示する方法については、次のように「教えて!goo」にあります。 http://okwave.jp/qa/q6858457.html カウントサンプルページ http://olo.sakura.ne.jp/test/test.html これを累計の数ではなく、1日ごとにカウントするには、以下のコードをどのように変えたらよいでしょうか? 例えば、3月3日00:00~24:00の24時間以内にクリックされた数を表示し、3月4日00:00になったら、表示される数が「0」にもどるような場合を想定しています。 言い換えれば、(例えば)毎日00:00になったらカウント数がリフレッシュされるような表示方法です。 // カウンター読込み(表示) function load(n){  var uri = "count/count0" + n + ".txt?r=" + Math.floor(Math.random() * 10000);  jQuery("#btn0" + n + " span").load(uri); } // 初期表示+イベント設定 for(var n=0; ++n<3;){  load(n);  jQuery("#btn0" + n + " p").click(   (function(m){    return function(){     jQuery.post("count/post.php", {"param1":"count0" + m + ".txt"}, function(){load(m);});    };   })(n)  ); }

  • 文字列をカウントする方法

    ファイルを読み込んで、その中の特定の文字列たとえば"映画"が何個あるかを調べるプログラムを作っているのですが、動作しません。ファイルには、改行やタブが入っているのですが、問題はファイルの読み込み方なのか、カウンタの方なのか分かりません。次がプログラムですので何か分かる方は教えてください。 if (open(FH, "data/log.txt")) { @file = <FH>; close(FH); } while(<STDIN>){ $movie=0; if(@file == "映画" ){ $movie++; } print $movie; }

  • cgiを使ってサーバ上にファイルを作成する方法

    無料のサーバスペースを使用してHPを作っています。 perlを使って自作したcgiをwindowsのコマンドラインで実行すると open(F,">oceco.txt"); print F "oceco\n"; close(F); この記述でファイルが新規作成されるのに、サーバー上のcgiで実行するとファイルが新規作成されません。 しかし、空のoceco.txtをFTPでサーバーに送って属性変更を済ませ、cgiを実行するとoceco.txtの中身が変更されます。 同じサーバでフリーの掲示板cgiを使用していますが、ログファイルを新規作成できています。 そこで質問です。 cgiをつかってサーバ上でファイルを新規作成する方法を教えてください。

    • ベストアンサー
    • Perl
  • バッチ処理 特定ファイルを除く削除

    環境:XP pro SP3 「test.txt」を基本ファイルとして残しておき、 変数を使って「test20090401.txt」というように、 バッチ処理をした日付が名前に入るように毎日自動コピー を作成しまして、加えて、8日目以降 1週間前の ファイルを自動削除したいのですが、基本の「test.txt」 は残しておきたいのです。 以下の処理だと「test.txt」まで削除されてしまうのですが、 他フォルダへの移動退避以外に「test.txt」を残し、 1週間前のファイルを削除する方法をご教授頂きたく お願い致します。 set yyyymmdd=%date:~-10% set yyyymmdd=%yyyymmdd:/=% set LOG_COUNT_LIMIT=7 cd c:\temp copy test.txt test%yyyymmdd%.txt for /f "skip=%LOG_COUNT_LIMIT%" %%a in ('dir /b /o-n *.txt') do (del %%a)

  • HTMLにCGIカウンターを

    初歩的なCGI(Perl)のアクセスカウンターの作り方を学びました。 今まではHTMLでHPを作成していました。そこでトップページにアクセスカウンターを付けたいのですが、当然のことながら今のトップページは「index.html」ファイルです。このファイルにCGIによるアクセスカウンターをつける場合、「index.html」のファイルを一から「index.cgi」ファイルにPerlで書き換えなければならないのでしょうか。今の「index.html」の一部分を書き換えるだけでCGIのアクセスカウンターが設置できないものでしょうか。

    • ベストアンサー
    • CGI
  • アクセスカウンタでリロード時のカウントされるのをやめたい!

    自分のPCでIIS5.0をインストールして CGIの作成練習をしています。 簡単なアクセスカウンタを作ったのですが、 どっかのをコピーしただけ。。。 sub counter{ #(読込み) open (IN,"<./count.dat"); $raikyaku = <IN>; close (IN); $raikyaku++; #(書き込み) open (OUT,">./count.dat"); print OUT $raikyaku; close (OUT); } これを、更新ボタンを押した時にカウントされない ようにしたいです。 また、BBSに埋め込もうと思っているので、 投稿ボタンで再表示された場合も カウントされてほしくありません。

専門家に質問してみよう