WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:アクセスカウンターを設置したのですが…

delta [MAIL] [URL] [WriteDate : Tue Dec 26 11:15:43 2000]

アクセスカウンターを設置したのですが,うまく動いてくれません。
詳細はこうです。
まず,CGIのソースプログラムを以下に載せます。

#!/usr/local/bin/perl
#テキスト式カウンタ(SSI #exec方式)▲(c)p4room(http://p4room.mda.or.jp/)

$logfile = "./count.log";       #カウンタ保存用ファイル

open(COUNT, "<+$logfile");      #読み書き両用オープン
flock(COUNT, 2);                #ロックする
chop($count = <COUNT>);       #カウンタを読み込み、行末の改行コードを削除する
$count++;                       #カウンタを+1する
seek(COUNT, 0, 0);              #ファイルポインタを先頭に戻す
print COUNT "$count\n";         #新カウント値をファイルに書き出す
flock(COUNT, 8);                #ロック解除
close(COUNT);                   #クローズ


printf("%d", $count);           #カウント値を出力
exit;                           #おしまい

このようにして,ログファイルを同じディレクトリにおいて,
パーミションを666にして、後は,ログファイルに格納されている
数字を0としました。
ですが、いくらブラウザの更新ボタンを押しても,HTMLで表示
されるのは”1”となり、更新されません。
また,ログファイルに格納されている数字を200としました。
これでも,アクセスカウンターの表示するものは”1”でした。

これらから類推したのですが,ログファイルから数字を読み込んで
いないような気がします。
ためしに,ソースプログラム内にprintf("%d", $count);
を挿入してみました。
カウンタを読み込み、行末の改行コードを削除する,というところ
の直後に挿入してみました。そうすると、HTMLでは0が表示されま
した。(このときのログファイル内には200が格納されていました。)

うまくいかなかったときの詳細はこのような感じです。

この件に関して,知識のある人,誰でもいいのでサポートお願いでき
ないでしょうか?

よろしくお願いします。


andi [WriteDate : Tue Dec 26 11:44:16 2000]

> open(COUNT, "<+$logfile");

open(COUNT, "+<$logfile");
でしたっけ。

> chop($count = <COUNT>);
> print COUNT "$count\n"; 

改行コードを付ける必要は無い気が。

あとSSIを使用した場合はログファイルのパスが
呼出元のHTMLから見た相対パスの場合もあったような。

ふじ [URL] [WriteDate : Tue Dec 26 11:49:27 2000]

> open(COUNT, "<+$logfile");
open(COUNT, "+<$logfile") or die $!;
 

バギンズ [MAIL] [URL] [WriteDate : Tue Dec 26 12:17:24 2000]

>deltaさん
こちらにいらっしゃいましたね。(^_^)

>andiさん、ふじさん
deltaさんが他の掲示板で困っているのを見て、ここを紹介しました。
的確な回答ありがとうございます。m(_ _)m

>open(COUNT, "+<$logfile") or die $!;
あ、しまった、そこ逆でしたか。気がつきませんでした。
ここを紹介してよかった。(^_^;)

delta [MAIL] [URL] [WriteDate : Tue Dec 26 23:41:22 2000]

>andiさん、ふじさん、バギンズさん
皆さんどうもありがとうございました。
やっと原因がわかりました。andiさんがおっしゃっていた,

>あとSSIを使用した場合はログファイルのパスが 
>呼出元のHTMLから見た相対パスの場合もあったような。 

これが原因だったようです。ログファイルのパスが
CGIファイルから見た相対パスではなくて,カウンターを
設置したHTMLから見た相対パスをつけなくてはいけなかった
らしいです。
それと、
>open(COUNT, "+<$logfile");
に直しておきました。

これができたときはすごく嬉しかったです。
これぞまさしく自作の感動でしょうか。
(本をそっくり真似たものですが…(^^;)
でも,いろいろ勉強になりました。

本当に皆さん,どうもありがとうございました。


回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]