KAMOME board

特徴

    表示サンプル
  • ページ内のどこにでも書き込むことができる新しいタイプの掲示板です。
  • 書き込まれた内容は徐々に薄くなり、デフォルトでは72時間で完全消滅します(過去の書き込みをみることもできます)。
  • 簡易ロックファイル機構により、同時アクセスによるログ破損をある程度防げます。
  • 書き込みがあった場合、書き込まれた内容をメールで受け取ることができます(要 sendmail)
  • ログを一世代何世代でもバックアップします。
  • 特定IPからの書き込みを禁止できます。
  • 自CGIプログラム以外の他のプログラムから書き込まれるのを禁止できます。これにより悪意あるプログラムからの連続アタックにより掲示板が荒れるのをある程度阻止できます。。
  • 一部のHTMLタグのみ選択的に有効にできます。
  • データを送信する前にどのように書き込まれるかプレビューできます。
  • HTMLを元にしたスキンを使用することによって、独自の見ばえを定義することができます。
  • Internet Explorer 5以上、Mozillaで動作します(デフォルトスキンを使った場合)。
  • ログの件数に上限を設定することができます。プログラムの改良により、数万件くらいまで何の問題もなく動くようになったため、ログの上限は撤廃しました。
  • Shift_JISで書かれているため、メモ帳でも容易に編集できます。
  • CGIからログを削除、編集する機能はありません。
  • 自動リンクは実装されてません。

動作環境

Windows2000 + An HTTPd server + ActivePerl
要 Perl5

ダウンロード

このスクリプトは W.S.C.R のランキングに登録されています。 もしお気に召しましたらランキングに投票していってください。
       kamome.cgi	プログラム本体
       kamome.log	ログファイル
       jcode.pl		ライブラリ
       corsair /		[フォルダ]
          kamome.htm	テンプレート
          kamome.js
          back.png
          color.png
          corsair.gif
          frame.gif
       lock /		[フォルダ]
          lockfile	ロックファイル

プログラムの修正

注意! ファイルの文字コードはすべてShift_JISです。
  • kamome.cgi を エディタで開いて修正します(スクリプトの文字コードはすべてShift_JISとして保存してください)。

    #!/usr/bin/perl
    プロバイダで規定されているPerlへのパスを記述します。サーバーによっては usr/local/bin/perlだったりします。
    my $duration = 72;
    かきこみが消えるまでの時間(単位:時間)
    my $back_url = 'http://';
    「戻る」URL(相対パス可)
    my $title = 'KAMOME board';
    タイトル
    my $text_color = &RandomColor();
    デフォルト文字色
    &RandomColor() とすると、連続した書き込みやクッキーに値が保存されてない場合にランダムに色が選ばれます。 ふつうに my $text_color = '#ff0055'; という指定もできます。
    my @block_ip = ('xxx.xxx.xxx.xxx',
                          'xxx.xxx.yyy',
                          '',
                          '');
    この文字列がIPに含まれていた場合、掲示板の観覧、書き込みを禁止します。(IPの一部でも可)
    my $script_path = './kamome.cgi';
    スクリプトのファイル名(相対パスまたはhttpで始まる絶対パス)。
    my $face_dir = './corsair';
    スキンファイルのフォルダ(相対パスまたはhttpで始まる絶対パス。末尾にスラッシュはつけない)
    my $face_file = './corsair/kamome.htm';
    スキンファイル(相対パスまたはサーバー内の絶対パス)。
    my $log_file = './kamome.log';
    ログファイル(相対パスまたはサーバー内の絶対パス)。
    my $tmp_file = './kamome.tmp';
    一時ファイル(自動生成、消滅します)
    my $lock_dir = './lock/';
    ロックファイルを格納するディレクトリ(末尾にスラッシュをつける)
    my $lock_file = 'lockfile';
    ロックファイル名(パスではありません)
    my $backup_file = './kamome.log.bk';
    ログのバックアップ(末尾に数字がつきます)。
    my $backup_file_count = 3;
    バックアップする世代数
    my $is_allow_tags = 2;
    タグを有効にするか
    0 すべて無効(実体参照に置換)
    1 すべて有効
    2 一部有効(指定したタグ以外実体参照に置換)
    my @allow_tags = ('A','B','S','I','FONT','SMALL','BIG','SPAN');
    $is_allow_tagsが2の時、有効にするタグ(大文字小文字を無視)
    my $mail_use = 0;
    書き込みがあった場合、書き込まれた内容をメールで受け取るか。
    1ならする、0ならしない。要sendmail
    my $sendmail = '/usr/sbin/sendmail -t';
    sendmailのパス($mail_useが1の時。パラメーターも含む)
    my $mail_address = 'web@@@write-off.cside.com';
    メール送信先アドレス($mail_useが1の時)
    my $mail_subject = 'From KAMOME board';
    件名($mail_useが1の時。二バイト文字は使わないでください。)
    my $disallow_from_another = 1;
    他のプログラムからの書き込みを禁止する
    $disallow_from_another に1を指定すると 環境変数 HTTP_REFDERER を調べ、 それが自プログラムのURLと違う場合は書き込めません。
    my $script_url = $ENV{'SCRIPT_URI'};
    自プログラムのhttpから始まる絶対パス。
    環境変数に SCRIPT_URI がセットされないサーバーではこのスクリプトのURLをhttp://から絶対パスで記述する。
  • ホームディレクトリ(ここでは public_htmlディレクトリとします)の下に、cgi-binディレクトリを作成し、上記のファイルをFTP転送します。全体のディレクトリ構成とファイル位置の設置例は以下のとおりです。(かっこ内はパーミッションの設定値)

      public_html / index.html (トップページ)
          |
          +-- cgi-bin[777] /
                     kamome.cgi	[755]
                     jcode.pl	[644]
                     kamome.log	[666]
                     corsair[755] /
                          kamome.htm	[644]
                          kamome.js	[644]
                          back.png	[644]
                          color.png	[644]
                          corsair.gif	[644]
                          frame.gif	[644]
                     lock[755] /
                          lockfile	[644]
    
        パーミッションの設定がめんどくさいという人は
        すべてのファイルを[755777]に設定しても動作します
        (安全性が低下しますが)。
      

変更履歴

  • 2001/11/6 Ver. 1.10 公開
    • デザインテンプレートをHTML 4.01 Strictに修正
    • デザインテンプレートのファイル名をkamome.datからkamome.htmに変更
    • その他、内部的にいろいろ修正。
  • 2001/11/6 Ver. 1.07 公開
    • デフォルトのデザインテンプレートを「F-4U Corsair」に変更
    • HTMLのタグの有効、無効を選べれるようにした。
    • 無駄にメモリーを使うような記述を修正。
    • バックアップを何世代でもとれるようにした。
    • その他、内部的にいろいろ修正。
  • 2001/10/24 Ver. 1.01 公開
    • __%unique_id_1%__、__%unique_id_2%__を新たにサポート
    • 標準添付されているデザインテンプレートを一部変更
  • 2001/10/18 Ver. 1.0 公開

デザインテンプレートの作成

    KAMOME boardは見ばえを決定する部分をデザインテンプレートファイルとしてプログラムから分割し、 自分で好きなデザインのテンプレートを容易に作ることができます。 デザインテンプレートはHTMLファイルを元にしており、その中に特殊な文字列を記述すると、 そこがCGIスクリプトによってデータの編集結果に置き換えられます。
    デザインテンプレートのスケルトン



    定義されている特殊文字列は以下のとおり。

    __%last_post_date%__最後にコメントが書き込まれた日時。
    __%error%__CGIからのエラーメッセージ
    __%back_url%__「戻る」URL
    __%face_dir%__デザインテンプレートのファイル一式があるディレクトリ
    __%duration%__書き込まれたコメントが完全に消えるまでの時間
    __%title%__掲示板のタイトル
    __%text_color%__デフォルト文字色
    __%script_name%__「KAMOME board」
    __%script_version%__バージョン
    __%script_path%__CGIスクリプトのURL

    この文字列が記述されている行そのものが置きかわリます。
    <!-- __%res_area%__ --> ログをHTML形式に変換したデータ
    <!-- __%prev_data%__ -->プレビュー時に渡される情報

    この文字列で挟まれている部分はCGIによって出力されたりされなかったりします。 これらを入れ子にすることはできません。また、この文字列がある行に他の文字を記述しても画面には出力されません。
    <!--If Preview-->プレビュー時に出力<!--End If Preview-->
    <!--If Not Preview-->プレビュー時でないときに出力<!--End If Not Preview-->
    <!--If Error-->エラー発生時に出力<!--End If Error-->
    <!--Comment-->コメント。出力されない。<!--End Comment-->
    <!--Tag Pattern-->これに挟まれた文字列を型として、ログをHTML形式に変換する。
    記述できるのは一度だけ。この内容は直接画面には出力されない。
    <!--End Tag Pattern-->

    <!--Tag Pattern--> 〜 <!--End Tag Pattern--> 内でのみ使える特殊文字
    __%opacity%__透明度
    __%moz_opacity%__透明度(Mozilla形式。%opacity% の値を100で割ったもの。)
    __%log_x%__X座標
    __%log_y%__Y座標
    __%log_color%__文字色
    __%log_res%__書き込まれた文字列
    __%unique_id_1%__アルファベット7文字で構成されるユニークなID
    __%unique_id_2%__3桁の通し番号

    注意点

    1. デザインテンプレートファイルは Shift_JIS で保存してください。
    2. テンプレートファイルの先頭に必ずHTTPヘッダを記述してください。また、ヘッダの終わりには空白行を一行以上入れてください。
    3. <!--Tag Pattern--> 〜 <!--End Tag Pattern-->が使えるのは一度だけです。