CGI_Board Archive - Archive of Web BBS's and libraries for Perl5
Version: 0.74 (beta test version) Date: Mon Aug 26 16:24:20 JST 2002
Copyright (c) 1998-2002 KUROKI Gen <kuroki@math.tohoku.ac.jp> All Rights Reserved
Permission to use, copy, and distribute the present archive is hereby granted, only providing that the copyright notice above, this permission, and the NO WARRANTY notice bellow appear in all copies and in supporting documentation.
著作権と無保証の宣言を表示する限り、自由に使用・コピー・配布して構いません。
このアーカイブに含まれるファイルの品質は全て無保証です。自分自身の責任のもと でお使い下さい。
http://www.math.tohoku.ac.jp/~kuroki/pub/CGI_Board/ http://zakuro.math.tohoku.ac.jp/~kuroki/pub/CGI_Board/
内容はどちらも同じである。前者の URL の方がわかり易いが、後者のサーバーの方 が軽いはず。
この文書:
00REDME-j.pod - pod 形式のこの文書 00REDME-j.html - HTML 形式のこの文書
使い方のヒント:
00Tips-j.pod - pod 形式の文書 00Tips-j.html - pod 形式の文書
Perl5 ライブラリー:
CGI_Board.pm - CGI と掲示板を扱うための Perl5 module CGI_Board.html - そのマニュアル
CGI_Board/Misc.pm - CGI_Board のための雑多な函数の Perl5 library CGI_Board/Misc.html - そのマニュアル
sample/ - CGI_Board module を使った sample scripts
jcode.pl - Perl library for Japanese character code conversion
CGI_Board.pm と CGI_Board/Misc.pm は自前で作成したが、 jcode.pl は Kazumasa Utashiro さん作である。 jcode.pl の copyright notice を Acknowledgments に 転載しておいた。
ウェブ掲示板システム:
BBS/ - CGI_Board libraries を使って構築された複雑な掲示板システム Config/ - 掲示板設定ファイルの例 RENTAL/ - 無料掲示板レンタル・サービス用のスクリプト集 utility/ - 掲示板のログの変換スクリプトなど
simplebbs/ - CGI_Board libraries を使って構築された単純な掲示板システム
他の方々の貢献:
contrib/ - 他の方々の貢献 (Config/ にあるもの以外)
痕跡:
obsolete/ - 様々なテストの痕跡
GET method における QUERY_STRING 変数の解析はもちろん、 POST method における
application/x-www-form-urlencoded
および
multipart/form-data
の両方に対応している。 multipart/form-data に対応しているので、ファイルのア ップロードの CGI を書くために利用できる。しかも、同一の name に対して複数の value が対応していても大丈夫である。
例えば、
use CGI_Board;
$cgi = CGI_board->new;
$cgi->parse_formdata;
$cgi_value = $cgi->last_value_index;
$value_of_item = $cgi_value->{'item'};
のように使用できる。
もちろん、 CGI_Board の機能はこれだけではない。ウェブ掲示板を作成するために、 多くの機能が追加されている。詳細については CGI_Board.html を読んで欲しい。
use CGI_Board::Misc.pm;
print localdate('J'), "\n";
print quotehtml("<big>hoge</big>"), "\n";
のように利用すれば良い。詳細については CGI_Board/Misc.html を読んで欲しい。
その主な特徴は以下の通り。
(1) 1つのスクリプトで複数の掲示板を運営できる。
(2) 各々の掲示板ごとに所有者のパスワードを設定できる。掲示板の所有者は投稿さ れた記事の削除や修正を自由にできる。この機能を利用して掲示板を他人に貸し出す ことができる。
(3) さらに、各々の掲示板のスタイルを掲示板設定ファイルによって、かなり自由に 変更できる。このアーカイブ内の Config/ の下にサンプル設定ファイルが置いてあ る。その記述能力はかなりのもので、すでに存在する多くの掲示板の真似をすること さえ可能である。
(4) スレッド形式の目次の作成が可能であり、記事の検索もある。記事の検索はファ イル単位ではなく、記事単位で行なわれ、検索結果を記事の索引もしくは記事そのも ので出力させることができる。さらに、記事や目次や検索結果は、通常時刻と逆順に 表示されるが、それを時刻の順に表示させることもできる。
(5) CGI ではなく、 HTML ファイルに直接アクセスすることによって、掲示板を読む ことができる。単に記事を読むだけのために、 CGI を起動するのは CPU の無駄遣い である。実際、サーバーが混んでいる場合は処理が不愉快なくらい重くなる場合もあ る。この掲示板システムなら、そのような問題はない。
詳細については BBS/BBS.html および Config/00README-j.html を読んで欲しい。
この掲示板システムの運用例を見たければ、
http://zakuro.math.tohoku.ac.jp/~kuroki/support/
にある CGI_Board サポート掲示板システムを覗いてみれば良い。
jcode.pl: Perl library for Japanese character code conversion
Copyright (c) 1995-1999 Kazumasa Utashiro <utashiro@iij.ad.jp> Internet Initiative Japan Inc. 3-13 Kanda Nishiki-cho, Chiyoda-ku, Tokyo 101-0054, Japan
Copyright (c) 1992,1993,1994 Kazumasa Utashiro Software Research Associates, Inc.
Use and redistribution for ANY PURPOSE are granted as long as all copyright notices are retained. Redistribution with modification is allowed provided that you make your modified version obviously distinguishable from the original one. THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES ARE DISCLAIMED.
Original version was developed under the name of srekcah@sra.co.jp February 1992 and it was called kconv.pl at the beginning. This address was a pen name for group of individuals and it is no longer valid.
The latest version is available here:
ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/
$rcsid = q$Id: jcode.pl,v 2.11 1999/12/26 17:16:47 utashiro Exp $; jcode.pl: Perl library for Japanese character code conversion
$Default_Forbidden_Patterns の定義に style
属性を禁止するようにするコードを追加した。
梱包してある jcode.pl を 2.13 にバージョンアップした。
%25 %23 %2B
%3F
に変換したものになります。例えば、掲示板設定ファイルの中で次のように使えば良い:
%{IF|url|<a href="goto.cgi?%{SQUOTE|url}">%{PLAIN|url}</a>|}
$cgi がセットされる前に
print_and_die() がコールされるため実行時エラーとなる。 (2)
$BBS_Board_Dir と $BBS_Board_Dir_URL
の値が異なる場合、検索結果の記事へのリンクが正しく生成されない。
00Tips-j.* を追加した。
CGI_Board/Misc.pm 内の check_html() (407 行目)
を修正して、タグの中の ``'' (もしくは '') で囲まれた部分の中に ' (もしくは
``) が含まれていてもエラーが出なくなるようにした。例えば、修正前では <a
href=''don't_access.html``>Don't Access</a>
でエラーが出るのだが、修正後は出なくなった。
symlink() を使えない (もしくは使いたくない) 環境のためのパッチ
nosymlink.diff を追加した。 patch < nosymlink.diff とすると、
BBS/BBS.cgi, CGI_Board.pm, CGI_Board/Misc.pm の 3
つのファイルにパッチがあたる。これは、試しに作ってみたものであり、まだ十分にテストもしていない。今後、真面目にサポートしない予定である。
check_bbslock()
を付け加え、掲示板システム全体をロックする機能を追加した。ロックされた状態では、新たに記事を投稿したり、掲示板の設定を変更したりできなくなる。。ロックするためには掲示板ファイルが置いてあるディレクトリーに
BBS.LOCK という名のファイルを作れば良い (中身は何でも良い)。例えば、
/home/name/public_html/bbs/ に掲示板システム全体を置いてあるならば、
/home/name/public_html/bbs/BBS.LOCK
を作成すれば良い。ロックを外すにはそのファイルを削除すれば良い。この機能の説明もまだ
BBS.pod に追加してない。
金子真樹氏による contrib/mkaneko/ 以下をバージョンアップした。汎用マクロ展開モジュール ExpandMacro.pm のマニュアル ExpandMacro.pod などが追加された。
BBS/cgi-bin.diff を更新した。更新する前のそれはバグっていたことが判明。
RENTAL/Skel*-senne.cgi を更新した。
check_html() を強化し、 `` と '
の整合性をチェックするようにした。
macroexpand() を強化した。 RENTAL/ 以下を更新した。
CGI_Board/Misc.pm の filelock() 内の
symlink(``'', ``$file$suffix'') を
symlink(``LOCK'', ``$file$suffix'')
に変更した。このようにしておかないとエラーが出るサーバーがあるらしい。
(海法さん、レポートどうもありがとうございます。)
RENTAL/ 以下を更新。
BBS/BBS.cgi に、掲示板設定ファイルの中に SSI の記述を含めることができないようにするコードを追加した。それは 1630行目付近の次の部分である:
foreach (@item) {
$config_value{$_} = $cgi_value{'board_' . $_};
# Forbid SSI in board config files for safety
$config_value{$_} =~ s,<\!--\#[^>]*>,,g;
}
もしも、掲示板設定ファイルの中に SSI の記述を含めたければ、これを、
foreach (@item) {
$config_value{$_} = $cgi_value{'board_' . $_};
# Forbid SSI in board config files for safety
# $config_value{$_} =~ s,<\!--\#[^>]*>,,g;
}
と変更しなければいけない。しかし、 SSI が使用可能な状態のまま見知らぬ人に掲示板を貸すのは危険であることには注意せよ。一通りの SSI 以外は許したくない場合は例えば次のように変更する:
foreach (@item) {
$config_value{$_} = $cgi_value{'board_' . $_};
# Forbid SSI in board config files for safety
$config_value{$_} =~ s,<\!--\#(?!exec cmd="\./logwrite")[^>]*>,,g;
}
これは、 <!--#exec cmd=``./logwrite'' --> 以外の SSI の記述を削除するための設定である。
海法紀光氏作の「簡易BBSファイル変換プログラム」に関する情報が書かれたファ イル contrib/kaiho.html 追加した。
BBS/BBS.cgi に手動で掲示板ファイルを新たにする機能 (new_board_file())を追加 した。例えば、日記などにこの掲示板システムを利用している場合は便利であろう。 現在更新中の掲示板ファイルを過去ログのリストにまわし、掲示板ファイルの番号を 1つ増やして、新たに掲示板ファイルを作成する。作成された新しい掲示板ファイルに は、掲示板ヘッダーと掲示板フッターのみが書き込まれており、記事の欄は空である。
$board->html_bdrhead("<!--*");
$board->html_bdrfoot("*-->\n");
という設定を挿入すれば良い。ただし、現在使用中の BBS.cgi をこのように書き変 えた場合は掲示板ファイルの方の <!---->, <!--==--> のそれぞれを <!--**-->, <!--*==*--> に書き変えなければいけない。
update_current_board_style()
を改良して、掲示板ファイルの番
号として最大のものに選び、掲示板ログファイルの番号をそれに同期させるようにし
た。それに合わせて、 CGI_Board.pm 内の board_check_current()
を修正した。
例えば、掲示板 bbs のファイルとして、 bbs0000.html, bbs0001.html, bbs0002.html が存在し、 bbs.html が bbs0000.html へのリンクになっているとき、 Update Current Board Style を実行すると、 bbs.html は bbs0002.html へのリンクに変更 され、さらに bbs-log.cgi は bbs0002-log.cgi へのリンクになる。そのとき bbs0002-log.html が存在しなければ、空の bbs0002-log.html を新たに作成する。
ただし、注意しなければいけないのは、そのとき、 bbs0002.html の内容が変更され てしまうことである。 bbs0002.html をそのまま変更せずにそのままにしておきたい 場合は、新たに空のファイル bbs0003.html を作成しておけば良い。このようにして おけば、 Update Current Board Style を実行すると、 bbs.html, bbs-log.cgi は それぞれ bbs0003.html, bbs0003-log.cgi へのリンクになり、空だった bbs0003.html には掲示板のタイトルなどが書き加えられる。
これによって、他の掲示板の記録を別の掲示板に移すのが容易になったはずである。 これ以上複雑なことをウェブ経由で行ないたい場合はブラウザー経由で shell もど きのことをしてくれる utility/sh.cgi を利用して欲しい。
Config/*-config.txt のパスワードの形式を変更して、 crypt()
函数の結果が異な る OS でもうまく行くようにした(海法氏の指摘による)。
board_check_current() に大きなバグを発見。
/a[0-9]+\.html/ は nya0000.html にもマッチしてしまうので、
/^a[0-9]+\.html$/ としなければい けなかったのだ。このバグが原因で、
nya0000.html が存在するとき、掲示板 a を 作成すると、 a.html が
nya0000.html にリンクされてしまうのだ。これはひどいの で、これよりも古い
CGI_Board.pm を使っている方はできるだけ置き換えるようにし て下さい。
掲示板自動レンタル用のスクリプトと掲示板設定ファイルを RENTAL/ の下に追加した。
BBS/BBS.cgi を変更して、スレッド形式の目次などにうるさい [reply to] を表示し ないようにし、さらにスレッド形式の目次の表示の順番がおかしいバグを直した。
Config/secret-config.cgi を修正して、各記事への reply がうまく行くようにした。
BBS/BBS.cgi を変更して、 /cgi-bin/ のような場所に置き易くした。もとのままだ と修正が大変だった。 (実は、 1998.11.10 に追加した説明では不十分であった。)
BBS/BBS.cgi を変更して、 改行を含む名前や題名を含む記事を削除したり置換した とき、その情報が掲示板のログに残らないバグを潰した。
BBS/BBS.cgi の read_board を Last-Modified header を付けるように改良した。
$group_table
の定義が間違っていたのでそれを修正した。
Config/secret-config.txt を微修正し、 Config/club-config.txt を追加した。こ のサンプル掲示板設定ファイルを利用すると、パスワードなどで書き込みできる人を 制限することができる。
Config/secret-config.txt
BBS/BBS.cgi 内の函数 board_old_logs が _c=1 (CGI 経由で記事を閲覧)に対応して なかったバグを修正した。
BBS/BBS.cgi: HUP, INT, KILL, TERM の signal を無視するコードを削り、もとに戻した。
スクリプトの変更は一切無し。
BBS/BBS.cgi: threaded index の画面でリンクをクリックすると別の画面にそれが表 示されるようにした。
utility/convlogs.pl: $replyto
の扱いに関するバグを取り、変換した過去ログでも threaded index
が生成されるようにした。
board_index()
を追加し、各掲示板ファイルの目次を表示できるよう にした。
BBS/BBS.cgi, Config/nandemo-config.txt: 記事の入力に input type=``text'' では なく textarea を使うように変更した。
utility/convlogs.pl: その説明文 (convlogs.html) を少し詳しくした。