[HOME]  

グラデショーンチャットの改造方法

ログ関連

機能追加
参加者表示
最終更新日:1999年12月19日

ログの二重化

片方のログは、無制限にログをとっておきます。ずんずん書き足していくだけです。
適当に自分のPCに取り込むようにしてください。

■改造前404行目あたり・・
# ログをフォーマット
unshift (@new,"$date<>$n_name<>$n_email<>$comment<>$color<>$host<>\n");

open(LOG,">$logfile") || &error("Can't write $logfile");
print LOG @new;
close(LOG);

# ロック解除
※※ここに追加します※※
if (-e $lockfile) { unlink($lockfile); }
}

■修正後
# ログをフォーマット
unshift (@new,"$date<>$n_name<>$n_email<>$comment<>$color<>$host<>\n");
open(LOG,">$logfile") || &error("Can't write $logfile");
print LOG @new;
close(LOG);
# ロック解除
$dblfile = './dbl.log';
open(DB,">>$dblfile") || &error("Can't write $dblfile");
print DB "$date<>$n_name<>$n_email<>$comment<>$color<>$host<>\n";
close(DB);
if (-e $lockfile) { unlink($lockfile); }

}
4行追加します。
空の dbl.log とでも名前を付けたファイルを用意してパーミッションを666に
しておいてください。

ただし、ログに書き込まれる順番は、通常のcomchat.logとは逆に新しい発言は、
どんどん下に追加されていきます。
(処理を早くするため、及び簡単にする為です。)
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−
<おまけ>
dbl.logを自分のサーバーにもってきてから読み取る特別なcomchatg.cgiの作り方。
(サーバー上に設置してもいいです)
■53行目あたりの修正
$script = './comchath.cgi'; # スクリプトファイル名(サーバー上に設置する場合は名前を変更して、その名前で保存してサーバーに設置。)
$logfile = './dbl.log'; # ログファイル名

■記事表示部の修正 304行目あたり
sub log_view {
# リロード時間を定義
if ($FORM{'retime'} eq '') { $retime = $re_sec; }

open(LOG,"$logfile") || &error("Can't open $logfile");
@lines = <LOG>;
close(LOG);
#(@lines < $gyou) || (@lines = @lines[0 .. $gyou - 1]); #この行の先頭に#を追加しておきます。
@lines = reverse @lines; #※※※この行を追加します。
print "Content-type: text/html\n\n";

上記のように表示行数の設定を無効として全部の行を表示させます。
また@lines = reverse @lines; を追加します。
(ログの順番のひっくり返し)
追加しなければ通常のチャットのログ画面と反対に表示されます。
(追加しない方が読みやすいかな?)
それで、comchath.cgiなどと別名で保存しておきます。

■呼び出し方
ローカルマシンなどでは、
http://127.0.0.1/~falcon/comchatg/comchath.cgi?retime=0
などと、?retime=0 と指定して呼び出せば
リロードはしませんし、ログ部分しか(通常のフレームの下)表示しません。
これで、ブラウザに表示させて名前を付けて保存すればOKです。
(過去ログとしてHTML化ができます)

一定時間アクセスがない場合にログ消去

一定時間発言がない場合に、自動的にログファイルを削除する方法です
■303行目あたり
## 記事表示部
sub log_view {
        # リロード時間を定義
        if ($FORM{'retime'} eq '') { $retime = $re_sec; }
                          
        open(LOG,"$logfile") || &error("Can't open $logfile");
■改造後 ## 記事表示部 sub log_view { # リロード時間を定義 if ($FORM{'retime'} eq '') { $retime = $re_sec; } local($mtime) = (stat($logfile))[9]; if ( $mtime < time() - 60 * 20) { open(LOG,">$logfile") || &error("Can't write $logfile"); close(LOG); } open(LOG,"$logfile") || &error("Can't open $logfile");

上記の例では、20分間書き込みがなければログを全消去いたします。
60 * の後ろの数字を変更して好きな時間に変更してください。

これは、ログを表示するときに、ログファイルの最終書き込み時間を調べて
現時刻との差が 設定時間以上であれば、その時点でログを消去するって事です。
(誰もアクセスがない場合は、消えません。)

 

発言全消去

$keyword = 'clear'; で設定したキーワードの入力は、自分自身の発言だけの消去です。
管理人として他の方の発言も全て削除したい場合は、オプション設置するchatmgrg.cgiでの 削除で可能ですが、以下の改造を施すことによって、簡単に全発言消去が可能です。
■371行目あたり
    if ($comment eq $keyword){$clear = 1;}
■変更後
if ($comment eq $keyword){$clear = 1;} if ($comment eq 'password'){$clear = 2;}
1行追加します。 'password'のところは、半角英数字にしておいてください。 管理人だけにわかるパスワードにしておくか、仲間にだけ教えておいてください。 そうしないと、やたら消されてしまっても困ると思います。
■405行目あたり # ログをフォーマット unshift (@new,"$date<>$n_name<>$n_email<>$comment<>$color<>$host<>\n");
■変更後 # ログをフォーマット unshift (@new,"$date<>$n_name<>$n_email<>$comment<>$color<>$host<>\n"); if ($clear == 2 ){@new =();}
このように一行追加します。

[HOME]   
管理人:ファルコン・タカ