- 締切済み
閲覧カウンターのカスタマイズについて
Aというページに設置した閲覧カウンターのカウント数値を Bというページ(こちらの閲覧者はカウントしない)に表示させて「現在Aのページを見ている人は●●人います」といった仕様のオンラインカウンターがほしかったので http://cgiscriptmarket.com/ で配布されている「Real_Time2 v.2.00 」をカスタマイズしてみたのですが どうしてもうまく出来ないところがあるので質問させていただきます。 Aページ用のカウントするファイル(本体real_time.cgi)と、Bページ用のカウント数を表示するファイル(本体を改造したものreal_time2.cgi)を用意して real_time2.cgiのほうを見てもカウントをログファイルに追加せずにAページの閲覧数を表示することに成功したのですが ログファイルにカウント数の記録が何もない状態なのに、なぜか1と表示されてしまいます。 ほかの閲覧カウンターCGIやPHPも同様のように改造してみると、閲覧カウントされてないはずなのに「1人閲覧中」と表示されてしまいます。 Aページを誰も見ていない状態(カウントログファイルには何も書き込まれていない状態)では「0人閲覧中(もしくは誰も見ていません)」という表示にするにはどうしたらいいでしょうか? いろいろ調べてみたのですが、さっぱりわからずお手上げ状態なので質問させいただきました。 よろしくおねがいいたしますm(_ _)m
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 15mm
- ベストアンサー率65% (65/100)
76行目付近より push(@date,"$now,$addr\n"); $count = @date; @date配列にログとして出力される予定のものが追加されています。 ($now,$addrともにコメントアウトにより未定義) その次の文で$countに@date配列の個数を代入しています。 ここで、カウントアップに当たる処理が行われています。 ついでに言うと、@date配列はどこかで定義されることも無く、(@dataならありますが) 76行目付近で突然現れ、要素が一つだけ入ったかと思えば以降増減は無く、 このCGIの中では配列の個数が常に1個のまま処理が行われます。 この個数で画像を出力してるわけですから、 誰もアクセスしていなくても全人類がアクセスしても「1人閲覧中」でしょう。 上で指摘した2行を $count = @data; にしてみてください。
- 15mm
- ベストアンサー率65% (65/100)
ログファイル読み込み カウントアップ 画面出力 ログファイル書き込み といった流れが元のCGIで使われているのではないかと推測いたしました。 出力の所でさりげなく+1されてるだけかもしれませんので、 よくみてカウントアップの処理を消してあげてみてください。
補足
わかりやすい説明ありがとうございますm(_ _)m なのですが、カウントアップ・出力の処理がどこなのか画面とにらめっこしてみたりしても全然わかりません… ttp://yappari.mukade.jp/real_time2.txt こちらがカウント数のみを表示する方のスクリプトなんですが、よければどの場所を消せば意図したとおりになるのか教えていただけませんでしょうか…? 「設定部ここまで」から下の#でコメントアウトしてある部分が一応自分で消してみた部分です。間違っているところもあったら教えてください。
お礼
ありがとうございます!ちゃんと意図したとおりに動作しました! 丁寧な解説までつけていただいてわかりやすかったです、本当ありがとうございましたm(_ _)m ですが今度は別の問題が… 誰も閲覧していないにもかかわらずログファイルが空にならなくて それが原因で常に1人閲覧中と表示されてしまうように… 原因はカウントするほうの本体スクリプトにアクセスがあったかどうかでログファイルの書き込み・該当アクセスデータの削除が行われるらしく 当然アクセスがない状態の場合ログファイルを空にする動作もないようで… 閲覧数のみを表示する改造したほうのCGIに 「一定時間ログファイルが更新されない状態(タイムスタンプに更新がない場合)はログファイルを空にする」 みたいな機能をつけることは可能でしょうか…? もし可能でしたらヒントややり方など教えていただけませんでしょうか、何度も申し訳ございませんm(_ _;)m 自分でも探してみます、わかったら補足として書き込みます。