《電子掲示板ソフト》  名称 ツリーズ -Trees- for v2シリーズ用  動作環境 OS:UNIX 言語:Perl4/5 文字コード:SJIS Method:POST/GET併用式  フリーソフトですが、利用規定の範囲内で自由にご利用ください。  他OSへの設置はご自身で移植対応してください。 [設置構成例] ┣━/data/ <777> ┃ ┣ jcode.pl <644> ... 日本語コード変換ライブラリ(v2.0以降のもの). ┣ trees.cgi <755> ... 実行するプログラム. ┣ password.cgi <666> ... 管理者用パスワードファイル.  ※ ファイル名trees.cgiは任意に変更できます。  ※ password.cgiはデータファイルであり、空ファイルを用意します。    CGIファイルとして認識させるために、CGI専用ディレクトリに置くか、    このように拡張子を.cgiにして、直接見られないように工夫します。    暗号化されて記録されますので、亡失してしまった場合は、このファイルを    空にしてすぐに掲示板を実行して設定します。 [過去ログ設定の方法]  任意の段階で、現在一覧されているデータを過去ログとして分離することができます。 過去ログになったデータは、投稿、削除はできません。また、読み出しカウントもしません。 保存状態となります。  たとえば現在、./data/内を最新ログとして使っているとします。これを閉鎖して過去ログ化するには、  #●過去ログ機能を 1:使う 0:使わない  $log = 1; 過去ログ機能を使うように設定します。次に、閉鎖(過去ログ化)するログディレクトリを、./data1/に名前を 変更します。これはサーバ上で直接ディレクトリの名前変更を行ってください。さらに、 そのディレクトリのパーミッションを777から755に戻し(変更)、保護します。プログラム内では、 そのディレクトリ名と、それに付ける名称を設定します。  #●過去ログの場所(パス値)と名称 %LOG = ( './data1/' , '過去ログ1(1999年5月2日〜5月4日分)', ); 最後に、最新ログ用に新たに./data/を作成し、パーミッションを777に設定します。 今後同様に過去ログを追加することができます。下記の書式を参考にしてください。 #●過去ログの場所(パス値)と名称 %LOG = ( './data1/' , '過去ログ1(1999年1月1日〜1月31日分)', './data2/' , '過去ログ2(1999年2月1日〜3月31日分)', './data3/' , '過去ログ3(1999年4月1日〜5月4日分)', ); この例での設置構成は、原則的に次のようになっているはずです。 ┣━/data/ <777> ←現在のログ ┣━/data1/ <755> ←過去ログ ┣━/data2/ <755> ←過去ログ ┣━/data3/ <755> ←過去ログ ┃ ┣ jcode.pl <644> ┣ trees.cgi <755> ┣ password.cgi <666> [メンテナンス]  管理者用パスワードは、記事毎に設定される削除用パスワードの代わりに使うことができる マスターパスワードです。管理には十分注意してください。掲示板の管理者は、投稿内容を できる限りこまめにチェック、管理する必要があります。投稿後の修正はできませんので、 一度管理閲覧すればいいでしょう。  処理上のメンテナンスは特に必要ありません。ファイル数制限や契約容量を越えないように、 注意しておくことは重要です。  コメントがある記事を管理者以外が削除できないように設定した場合、管理者用パスワードを 入力すれば削除できます。  記事ファイルは、過去ログを除き、閲覧毎にリードカウント(読み出し数)の書き換えが行われます。 ロック処理はされていますが、完全に安全ということはありません。(過去ログは読み出しのみと なるので、問題はないでしょう。) 重要な内容を扱うのであれば、データディレクトリ内の ファイルのバックアップをすることは言うまでもありません。すべてテキストファイルですが、 サーバのOS用のファイルですので、サーバとパソコンが異なるOSの場合(ほとんどの方がそうですが)、 転送モードに注意してください。ファイルの編集を一切しないのであれば、バイナリモードで 取り出すことで、完全な形で保存できます。万が一の場合は、サーバ上のファイルをすべて削除した後、 取り出したときと同じバイナリモードですべて転送し、すべてのデータファイルのパーミッションを 666に設定します。 データの移動もこの方法で可能ですが、暗号方式の異なるサーバに移動する場合は、 管理者用パスワードを含め、すべてのパスワードは使えなくなります。管理者用パスワードは、 移転先で再設定ができますが、記事毎のパスワードは、データを直接編集しなければできませんので、 記事の削除は、管理者用パスワードでのみ可能となります。 [その他]  投稿時のデータ(名前、Eメール、パスワード)、最終ログオン日時と既読位置、一覧形式は、 クッキーを利用していますので、使えないブラウザの場合は、意図する動作をしない場合があります。 また、一部にJavaScriptとスタイルシート(CSS)が使われていますが、これらは使えないブラウザでも 問題ありません。  既読位置は、現在の最終番号よりもブラウザに記憶された番号が大きい場合は無効になります。 たとえば、途中でデータを削除して改めて運用開始した場合や、現在のログが過去ログへ移行され、 最新ログの状態がリセットされた場合などです。  コメントお知らせ機能で送信されるメールには、記事の記入者が入力できる内容をメールに 含むことはできません。いたずらに利用される可能性がある処理は入れることができないためです。 〔エラーコード表〕 ------------------------------------------------------------------------------------------ E1 自動検出できなかったので、初期設定 $reload を設定してください。 E2 管理者用パスワードファイルが見つかりませんでした。 設定した場所にパスワードファイルが存在しているか確認します。 E3 一覧を抽出することができません。 opendir()が実行できないために、使えません。 E4 この掲示板は標準入力(POST)のみ使用できます。(クエリー入力併用) E5 $ref_axsを1に設定している場合に関連します。 この掲示板以外からの投稿を検知しました。 原則的に、$reload(または自動検出されたURL値)で設定したURLが、 実行(参照)元URLに含まれない場合に、このエラーとなります。 正規な投稿であってもこのエラーになる場合もあります。 E6 チェックファイルが作成できません。 同じ内容の連続した投稿を防止するために、一時記録する作業ファイル($wcheck値)にデータが 記録されます。このファイルに記録できない場合に起きます。 運用後に起きるこのエラーは考えにくいので、一旦この作業ファイルを直接削除してください。 E7 記事の記録ができません。 $data_dirで設定したディレクトリのモード(パーミッション)が、nobodyに実行権限を与える値で なければなりません。 E8 記事のパスワードが認証されない場合は、管理者用パスワードで削除できます。 管理者用パスワードは、すべてのパスワードの代わりに使えるマスターキーの役目が ありますので、管理には十分注意してください。 E9 なんらかの原因でファイルの削除ができませんでした。 直接削除してください。 E10 ファイルが壊れている可能性があります。 必要なければ直接削除してください。 E11 ファイルが壊れている可能性があります。 ツリー管理ファイルなので、このファイルで管理されるべき記事が 一覧できない可能性があります。必要なければ直接削除してください。 E12 管理者用パスワードファイルが、設定した場所に存在するか、確認してください。 E13 管理者用パスワードを亡失した場合は、パスワードファイルを空ファイルにしてから、 すぐ掲示板を実行してください。パスワード設定画面になります。 E14 パスワードは最低6文字以上で構成してください。 また、数字、文字、記号を意味なく組み合わせることが大切です。 こまめに変更することで、さらに安全性が高まります。 E15 管理者用パスワードファイルが、設定した場所に存在するか、確認してください。 さらに、記録可能なモード(パーミッション)になっているかを確認してください。 E16 何らかの原因で、暗号化前のパスワード(平文)の暗号化に失敗しました。 前の画面に戻って、再度実行してください。 E17 使用中(ロック中)である場合に発生するエラーです。 常に起きる場合は、$data_dirで設定したディレクトリのモード(パーミッション)が、 nobodyに実行権限を与える値であるかどうかを確認してください。 ロック方法は、symlink()またはopen()方式の最善のどちらかが自動的に選択されます。 E18 設定した場所に、過去ログが見つかりません。設定と存在を確認してください。 ------------------------------------------------------------------------------------------ [技術資料] ・データディレクトリ内のファイル構成は次の通り。  .msg ... 投稿記事  .res ... コメント記事  .tre ... ツリー構成ファイル(.msgと同じ番号) ・メッセージファイルのデータ構造  .msgと.resのファイル構造は同じです。冒頭から最初の空行までがヘッダ行となり、  ヘッダ名その内容 という形式になっています。 pwd KJc62OGy2hF46 パスワードを暗号化した文字列 rc 23 リードカウント数 date 1999/4/29(木) 21:31 記録時刻 uname rescue 投稿者 email rescue@ask.ne.jp Eメール host utp121.ask.ne.jp ホスト名 subject タイトル 題名 size 1259 内容文のサイズ how 1 記録形式(0または無:改行無効 1:図/表モード -1:改行有効) link 1 内容文にリンクがある場合の措置(1:リンクする 無:しない) resp コメントの場合に直接の元となるファイル名 tree 12 所属するツリーファイルの番号 psemail 1 コメンお知らせメールをするかどうか(する:1) res 1 この記事にコメントが存在するかどうか(する:1) ・記事削除時の動作  対象になる記事ファイル(.msgと.res)は、空のファイル(サイズ0byte)になり、物理的に  削除はされず、論理削除となります。一旦論理削除したデータを復活することはできません。  論理削除されたファイルを直接物理削除しても、動作に支障はないと思われます。  ツリー構成ファイル内では、論理削除された記事番号の直前に ! マークが付加され、  削除された記事であることが認識されます。は、番号の記事にコメントが  付いた場合に挿入される位置を示します。下記の例の場合、43番記事が削除されていることになります。
29.msg
40.res
!43.res
44.res
 なお、すべて削除されている記事を管理しているツリー構成ファイルは削除しても支障はないと思われます。  その場合は、そのファイルで管理されていた記事ファイルも削除しても支障はないと思われます。  削除ファイルはツリー構成形成上必要となりますので、画面上に表示されます。 ・wwwbbs.lockというファイルまたはシンボリックリンクが存在している場合、何らかの原因で、 ロック処理が開始されたまま処理が終了してしまった可能性があります。ファイル操作に技術がないと 直接削除することができない場合があります。もう一度実行すれば、リトライエラーを促すことで、 削除することができるはずです。 ・wwwbbs.wckは自動的に作成されますが、直前の投稿内容の一部が記録されます。投稿ボタンの 2重押しなど、同じ内容の連続投稿を防止するために、このファイルの内容と比較して、 異なる場合にのみ記録処理されます。なお、記事削除時にはこのファイルは空となりますので、 投稿した記事を削除して、また同じ内容の記事をすぐ投稿することは許可されます。 ・その他の注意事項  物理削除やデータ修正には、それ相応の理解と知識が必要です。十分にプログラムを解析し、  ご自身の判断で行ってください。Web上の操作以外の措置を行った場合のサポートはできません。  不用意に手を加えると、動作に支障をきたすことになりますので、十分注意してください。 ・潜在するバグの可能性  全て論理削除済みのデータになった場合にツリーファイルと全当該ファイルを物理削除する処理をして いましたが、稀に、1件でも生きているデータがあるのにも関わらずツリーファイルが物理削除されて しまうことがあり、どうしても原因が掴めないために、物理削除処理をやめてあります。疑わしきは 処理せず(フールプルーフ)です。 以上.