#!/usr/bin/perl
# ↑プロバイダの指定に合わせて書き換えてください
#┌─────────────────────────────────────
#│ BBSの番人 ver1.03 (2004/09/14)
#│ Copyright(C) Usagi all rights reserved.
#│ http://kiriusa.cool.ne.jp/living/
#│
#└─────────────────────────────────────
$ver = 'The keeper in BBS v1.03';
#┌─────────────────────────────────────
#│注意事項:
#│
#│ このスクリプトはフリーソフトです。
#│ このスクリプトを使用したために生じたいかなる損害に関しても、
#│ 作者は一切の責任を負いません。
#│
#│ 設置に関するご質問は、掲示板でお受けいたします。
#│ 但し、適切なお答えができるとは限りません^^;。
#│ あくまでもダメ元でご相談ください。
#│
#│ サーバー環境によっては正常に動作しない場合があります。ご了承ください。
#│
#│ また、読み出しのたびにログファイルの上書きを行うCGIも稀にあり、
#│ 対象がそうしたCGIのログファイルの場合、UPマークがつきっぱなしになるなど、
#│ 当cgiの動作に違和感の出るおそれがあります。
#│
#└─────────────────────────────────────
#
# 【ファイル構成例】
#
# お使いの掲示板と同じディレクトリにでも置いてやってくださいまし。
#
# public_html (ホームディレクトリ)
# |
# +-- cgibin / bbskeeper.cgi [755]
# |
# +----- img [755] / up.gif [644]
# no.gif [644]
#
# upマークを表示したいhtmlファイルのソースの中に、
#
# のように書き込んで、このcgiプログラム呼び出してください。
# cgiへのパスをお間違えなく!
# ?のあとには数字を入れます。チェックしたいファイルが1つの場合は1を入れてください。
# 複数のファイルのチェックをこのプログラム一つで行いたい場合は、下記の@logfileで
# 何番目に指定したファイルについてチェックをするかを指定します。(1以上)
#
#----------------------------------------------------------------------#
# ▼設定項目 #
#----------------------------------------------------------------------#
# 更新状態が知りたいファイルへのパス(掲示板の場合は、ログファイルへのパス)
# 絶対アドレス(http://〜)不可。相対パスで書いてください
# 複数指定可能。
@logfile = ("./logdata.log","", "");
# 更新されたとき表示したい画像へのパス
$upgif = './img/up.gif';
# 更新されていないときに表示したい画像へのパス
$nogif = './img/no.gif';
# 何時間以内に更新されたら、upマークを表示するか
$since = 12;
#----------------------------------------------------------------------#
# ▲設定完了 #
#----------------------------------------------------------------------#
#
# 引数のデコードとエラーチェック
$val = $ENV{'QUERY_STRING'};
if (!$val){ $val=0;}
else {
$val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
if($val > @logfile){ &error("invalid value specified: $val");}
elsif(!$val) { $val=1;}
$val--;
}
# 現在時刻取得
$current = time;
$flag = 0;
# ファイルが存在するかどうかのチェック
if (-e $logfile[$val]){
# ファイルの更新時間取得
$update = (stat($logfile[$val]))[9];
# 指定時間以内の更新があったかどうかチェック
if ($current - $update < $since * 60 * 60) { $flag = 1;}
}
else { &error("no such file: $logfile[$val]");}
$img = ($flag) ? $upgif : $nogif;
# 画像を表示する
open (IMG, "$img") || &error("image file cannot be found: $img");
print "Content-type: image/gif\n\n";
print ;
close(IMG);
exit;
#----------------------#
# エラー用サブルーチン #
#----------------------#
sub error {
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "$_[0]\n";
exit;
}