web裏技のアナライザ、2日以上前のログを表示するには

[上に] [前に] [次に]
shuhei 2000/01/06(木) 15:38:52
web裏技のログアナライザを使用しています。(web裏技の掲示板でも質問したのですがあまり回答が得られなそうなので、こちらで再ポストします。よろしくお願いします)
デフォルトでは一昨日分より以前のものは自動削除されるようになっていますが、これを一ヶ月分保存するように改造しました。
その、一昨日分より以前のログをanalyze.cgiに反映させる為、下記のようにcgiを書き直してみました。URLを/analyze.cgi?につづけて2を入れると2日前、3を入れると3日前....のようになるはずだったのですが、なぜか12日前のところまで行くと本日分にループしてしまうのです。
この問題を解決する方法、あるいは30日分のログを表で表示する方法がありましたらご指南ください。よろしくお願いいたします。


-------------------------------------------

$buffer = $ENV{'QUERY_STRING'};

if ($buffer =~ /Yesterday/i) {

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 24*60*60);
}

elsif ($buffer =~ /2/i) {

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 2*24*60*60);
}

elsif ($buffer =~ /3/i) {

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 3*24*60*60);
}

elsif ($buffer =~ /4/i) {

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - 4*24*60*60);
}
.
.
.
(以下同様に30までつづく)

andi 2000/01/06(木) 19:33:37
関係ないかもしれませんが、

if ($buffer =~ /Yesterday/i) {
    $days = 1;
}else{
    $days = $buffer;
}

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time - $days*24*60*60);

としておくと見やすくて良いかもです。

andi 2000/01/07(金) 09:01:41
あ、あとで思い出したのですが、
12日前に戻るのは
elsif ($buffer =~ /2/i) { は$bufferが2を含む場合
という意味だからです。
$buffer == 2なら良いかな。

あと上の僕の例は
$bufferが数字以外の場合の処理も考えてください。

shuhei 2000/01/16(日) 05:32:49
[[解決]]
謎が解けました。
12と入力しても、2と解釈されてしまっていたのですね。
どうもありがとうございました。(お礼を言うのが遅くなってしまって申し訳ありません。)

[上に] [前に] [次に]