CGI-BBS > チャット > ツーショットチャット > 2ショットチャット3.3でログを保存したい!


カレッヂ
カレッヂ


質問者 ま〜くん  投稿日 1/16(火) 00:55:46
2ショットチャット3を基本として、2ショットチャット4の機能であるログ保存を
持たせた2ショットチャットに改造したいけど、さっぱり分からないのです!

3に手を加えていきたいと思っています。
4より3の方が使いやすいから・・・・

誰かおしえてくださ〜い!
回答者 どりちゃ  [削除]  投稿日 10/6(土) 20:43:59
レスキューさんの著書『実践Perlプログラミング』のP.272を、以下のように応用すればできますよ。

あらかじめ「yyyyyy」というディレクトリと、その中にルーム名の付いた空のtxtファイル
(chmod 666)を部屋数の分だけ用意します。

次に2shot.cgiの書き換えを3箇所行います。

一、
#データ格納フォルダの場所(Path) このCGIから見た位置
$base_dir = './x/';
#========================================追加分========================================
$log_dir =  './yyyyyy/'
#======================================================================================

二、
$chat_file = $base_dir . "$FORM{'room'}\.log";
$entry_file = $base_dir . "$FORM{'room'}\.ent";
$mes_file = $base_dir . "$FORM{'room'}\.mes";
#========================================追加分========================================
$log =  $log_dir . "$FORM{'room'}\.txt";
#======================================================================================

三、
sub write {
$host = $ENV{'REMOTE_HOST'};
$addr = $ENV{'REMOTE_ADDR'};
if ($host eq '') { $host = $addr; }
if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; }
        if (!open(DB,"$chat_file")) { &error('システムエラー','チャットファイルが開けません.'); }
        @lines = <DB>;
        close(DB);
        $axs = @lines;
        if ($axs >= $max) { shift(@lines); }
        push(@lines,"$date_now\,$FORM{'name'}\,$FORM{'chat'}\,$FORM{'email'}\,$host\n"); ##$host入れる。
        if (!open(DB,">$chat_file")) { &error('システムエラー','チャットファイルへ記録できません.'); }
        print DB @lines;
        close(DB);
#========================================追加分========================================
        $FORM{'name'} =~ s/&lt;/</g;
        $FORM{'name'} =~ s/&gt;/</g;
        $FORM{'chat'} =~ s/&lt;/</g;
        $FORM{'chat'} =~ s/&gt;/</g;
        if (!open(LOG,">> $log")) { &CgiDie('エラー','ログファイルへ記録できません.'); }
        print LOG "$date_now $FORM{'name'}>$FORM{'chat'}($host)\n";
        close(LOG);
#======================================================================================
        $mugon = 0;
}

これで部屋毎のログが取れます。ただしチャットのログはすぐ増大するので、管理は大変ですが。

返信(回答)する


Web裏技