特徴
- この電子掲示板はDBMを利用しています。
古いタイプのperlやAny_DBMの種類によっては動作しないことがあります。
WebBOARD等の掲示板では、インデックスファイルがシーケンシャル(順次読み出し式)になっています。
カセットテープのようなもので、頭出しするにはその位置まで早送りしなければなりません。
DBMはランダムアクセスファイルですので、CDのように好きな位置に瞬時にアクセスができます。
どちらも長所短所がありますが、DBMを採用することにより、インデックス処理を容易にしました。
- フレーム(2または3分割)対応です。フレームに対応していないブラウザでも動作します。
- クッキーによる投稿者/Eメール/投稿キーの記憶機能だけでなく、前回閲覧した記事番号を記憶し、
次回アクセスした際に未読情報をリストする機能があります。
- 入力されるEメールは自己申告に過ぎませんので適当なものであっても記録できますが、
これをある程度信用性のある(投稿者本人の正しいEメールかどうか)表示にするための投稿許可制機能があります。
投稿する際にこちらで指定した投稿キーでないと投稿できないようにするもので、投稿キーは申告したメールアドレス宛てに送信され、
本人でないと受け取れないシステムです。初期設定で、利用するかどうかを設定できます。
- 投稿した際に記録しておく投稿キーを使って、その記事を投稿者自身が削除することが可能です。
記事は物理的に削除されます。(WebBOARDのように復活機能はありません。)
- マスターキー制度により、管理者はそれを使って全ての記事の削除権限を持てます。
- 投稿キーおよびマスターキーはcrypt()関数により暗号化され記録されます。
- 利用できない半角カナを入力されても全角カナに変換する機能がありますので、jcode.plはv2.0以降を利用してください。
バージョンチェック機能もついています。
- タグの利用を許可するかどうかが初期設定で選択できます。
- リスト(記事タイトル一覧)は、降順(新しい順)昇順(古い順)に指定番号から指定件数表示が可能です。
- 入力された投稿者名/タイトル/検索キーを対象にした文字列検索が可能です。
独自のFF方式によって、WebBOARDの検索処理よりも格段に高速化されています。
論理積(AND)と論理和(OR)検索が可能です。ただしAND検索の場合は、検索文字列の並びも判定されます。
- 参照カウンタ(その記事が何回読み出されたか)機能は標準で装備されています。
- レスポンスマネージャ機能により、コメント関係がわかりやすくなっています。
リスト画面にはそのコメント元や先の番号が、記事内にはスレッド構成が表示されます。
- スレッドを構成しているすべての関連記事を記事番号順に一括表示する機能があります。
- 投稿テスト機能があり、投稿する前に確認ができます。
- コメント投稿時には、コメント元の記事の引用を利用できます。
ただし、常に入力欄に引用が入るのではなく別画面に表示され、必要な部分をコピーして利用することになります。
これは、データ記録容量に制限があることから、できるだけ無駄な内容が記録されないようにする為の配慮です。
- 記事番号で各データは管理されていますので、2000年を経過しても動作に影響はありません。
- 時刻はlocaltime()で取得しているために、外国サーバに施工する場合や、日本でも将来サマータイムが実施されれば、
surfboard.cgi中の#時刻取得で時差修正しなければなりません。(FAQ参照)
- CGIファイルは1つしかありませんので、perlのパス設定はsurfboard.cgiだけすれば施工できます。
その他のファイルはすべてsurfboard.cgiのサブルーチンとして起動されます。
- WebBOARDのように2重起動によるトラブルを考慮した設計になっていない為、2重起動防止機構(ロックファイル式)が組み込んであります。
ただし、極一部のサーバではこの機構が利用できません。この機構を使わないように初期設定すれば利用できますが、
2重起動によるデータファイル破損の可能性が非常に高くなりますので、WebBOARDのご利用をお勧めします。
なお、ロック機構も完全なものではありませんので、手引き書に書いてある方法に従って、
データのバックアップをこまめに保存しておくことが重要です。
- 初期設定はsetup.plで一括して行います。各ファイルへ個別に設定することはありません。
サンプル
スクリプト名 |
英名 |
バージョン |
サンプル |
備考 |
サーフボード |
SurfBOARD |
2.3 |
サンプル |
フレーム上下2または3分割(サンプルは3分割設定) |
ダウンロード
v2.3をご利用の方へ
異サーバ間でデータを移動するためのツールを追加しました。詳細は添付のbackup.cgiをご覧ください。
これは、2005/10/19 12:20 以降のv2.3に添付されています。
次に、当時のパスワード暗号化処理に誤りが残っていました。
お手数ですが、以下3つのファイルの該当する部分を書き換えてください。
2005/10/19 12:20 以降にダウンロードした方は既に修正されています。
都合によりバージョン番号を変えておりませんので、ご了承ください。
"master.pl"
$now = time;
($p1, $p2) = unpack("C2",substr($now,-2,2));
$wk = $now / (60*60*24*7) + $p1 + $p2 - 8;
@saltset = ('a'..'z','A'..'Z','0'..'9','.','/');
$nsalt = $saltset[$wk % 64] . $saltset[$now % 64];
$c_master = crypt($FORM{'pwd'},$nsalt);
↓に訂正
srand();
@saltset = ('a'..'z','A'..'Z','0'..'9','.','/');
$nsalt = $saltset[int(rand(64))] . $saltset[int(rand(64))];
$c_master = crypt($FORM{'pwd'}, $nsalt);
"pwd.pl"
$now = time;
($p1,$p2) = unpack("C2",$now);
$wk = $now / (60*60*24*7) + $p1 + $p2 - 8;
@saltset = ('a'..'z','A'..'Z','0'..'9','.','/');
$nsalt = $saltset[$wk % 64] . $saltset[$now % 64];
$crypt_pwd = crypt($input_pwd, $nsalt);
↓に訂正
srand();
@saltset = ('a'..'z','A'..'Z','0'..'9','.','/');
$nsalt = $saltset[int(rand(64))] . $saltset[int(rand(64))];
$crypt_pwd = crypt($input_pwd, $nsalt);
"regist.pl"
$now = time;
($p1,$p2) = unpack("C2",substr($now,-2,2));
$wk = $now / (60*60*24*7) + $p1 + $p2 - 8;
@saltset = ('a'..'z','A'..'Z','0'..'9','.','/');
$nsalt = $saltset[$wk % 64] . $saltset[$now % 64];
$crypt_pwd = crypt($FORM{'pwd'}, $nsalt);
↓に訂正
srand();
@saltset = ('a'..'z','A'..'Z','0'..'9','.','/');
$nsalt = $saltset[int(rand(64))] . $saltset[int(rand(64))];
$crypt_pwd = crypt($FORM{'pwd'}, $nsalt);
|