*************************************** ざ、げすとぶっくまねーじゃー gbm ***************************************
見ためはちみがさっき見てた通り。なに見てない? んじゃ わしんとことか。ランダムの御題がついてゲ ストはその御題に答えて、持ち主が返事を書くというスタイルのゲストブッ クさね。御題や返事は無しにもできるが。
で使う場合の話では、まず誰かが書き込みをすると書いた内容のメイ ルが来る。メイルをもらったらそれに返事を書けばゲストブック上の返事 になるという仕組みである。返事を書く方法にはいくつかあって
のどれかが使える。まあ大抵は(1)の方法が楽チンじゃな。自分のゲス トブック見なくても、速攻で返事が書けるというものじゃ。その他主な機 能を列挙してみた。
興味が出たら次を読もう。
少なくとも CGI が使えるHTTPDじゃないとだめっす。ONにしてくだ さいな。デフォルトでSSI(Server Side Include)も使っているので、 SSIが使えないとちょっと面倒。「CGIよりSSIのほうが危ない」という 迷信を信じてSSIだけを禁止している脳の無いプロバイダが世の中多く て困る。おっと、話を戻そう。
もしそれらの使えるプロバイダでも、ユーザ側で明示的にSSIとCGI が使えるようにする必要があるかも。たいていapacheだとおもうが、 apache 1.3.5以降(かな?)の場合は .htaccess というファイルに
Options ExecCGI Includes AddHandler server-parsed .shtml AddHandler cgi-script .cgi
なんて書く必要があるかも。
適当なディレクトリを掘ってそこに移動してgbmを展開する。ゲス トブックを books というディレクトリに保存するのでさらに掘る。
% mkdir books
HTTPデーモンちゃんが書けるように chmod する。
% chmod 1777 books
もしログファイルを書いて欲しかったら同じように
% mkdir log % chmod 1777 log
して大体の準備は完了。
gbm ちうファイルの先頭に変数がわらわら書いてあるので、自分用 に書き換えておくれ。でもgbmを直接書き換えるとバージョンアップし たときにまた最初からやり直さないといけなくなるので、gbmの「ここ からENDまで」っていう範囲をこぴってgbconf.pl という新規ファイル を作ってそこにブチ込む。あ、gbconf.plの最後には必ず
1;
という行を入れてな(元々入ってるけど)。すくなくとも、$owner は かきかえてちょ! これ書き換えないといつまで経っても書き込み通知メ イルが来ない。
あと messages というファイルにランダムに出て来るメッセージをいれ る。messages.sample というファイルがあるのでこいつをmessages というファイルにコピーして適当にかきかえてちょ。人と同じじゃつま んないもんね。少なくとも、HELLO, RAKU, FIELD, ANSWER タグのデー タは全部書き換えてちょ。んで、ANSWERのところを、
ANS19990101 あけおめ ことよろ
のように「ANS日付」というタグにしておけば、対応する日にそのタグ に書き込まれた返事を書くようになる。これもうまく利用するよろし。
ということで、
gbmを呼び出すHTMLをかきませう。こんな感じ。gb.shtmlという 名前にしてね。
---------------------------------------------------------------------- <html> <head><title>Join us!</title></head> <body> やー! <!--#exec cmd="./gbm -init"--> </body> </html> ----------------------------------------------------------------------
早速ページを表示して書き込んでみやう。
どうなりましたか?
おしまい。
書き込みがあると、あたかも書いてくれた人が送ったかのようなメイ ルが届くの。そのメイルに対してお返事メイルを送っても良いんじゃが、 通常は上で掘った books ディレクトリに `年月日-メイルアドレス' とい うファイルができていてるので _EOM_ 以降の行にお返事を追加してちょ。
楽にお返事を書きたい。そんなちみのために楽々お返事ツールが用意されているのでつこ てみてくれ。 腹野もなんかためになるもん書いてるみたいだから読んで見るよろし。
書き込みが溜りすぎるとページが重くなって嫌われちゃう。ぜし月毎 にわけるべし。gbm-1.29から、gbmが月毎の仕分け作業をするようになっ たので
% ./gbm -refile
とやると先月分の書き込みを "先月の年月/" というディレクトリに格 納してくれ、ついでにバックアップも取る。書き込みが多くてファイル サイズが気になるようなら、
% ./gbm -refile -compress (./gbm -compressだけでもOK)
とすれば、圧縮してくれる。以上の操作で先月のディレクトリがうま く出来ているかを実際に自分のゲストブックを見て確かめて、うまくいっ たようなら
% ./gbm -wipe
とすると、./books/ ディレクトリから(不要になった)先月分の書き込 みを消去してくれる。cronで ~/public_html/gb/gbm -refile を起動しう まく先月ディレクトリが出来ていることが分かったら
% ~/public_html/gb/gbm -wipe
なんてするといいかも。
./gbm -refile で先月ディレクトリを作っておくと gbm が自動的にゲ ストブックページにリンクを作ってくれるのだ。なお、先月分でなくて、 特定の月のものを整理したいときは
% ./gbm -month 199709 -refile
のように -month オプションで 年月 を指定するべし。さらに、長期 に渡ってgbmを使っていると、月毎にリンクを張っても一杯になってしま うので、年毎に分類してしまっても良い。そういう場合は 年/ のディレ クトリを掘ってそこに過去の月分類ディレクトリを入れてしまえば良い。 年/index.html を作ったら messages ファイルの REPLY 項目でリンクを 張ればよろし。
ファイルに保存するときはPerlやshが混乱しないようにEUCで書き、ブ ラウザに渡すときはブラウザが文字コード判定しやすいようにJISで表示 するようにしている。
書き込みに「にゅう」が付くのは、来てくれた人が前回gbmページを開 いた時間以降に書かれたやつ。
いろいろなトラブルの解決法である。
BIGLOBEとかはそうらしい。しゃーないので、gbmを呼び出すのを全部 CGIにする。まず gbm.cgi っていうシェルスクリプトを以下のようにす る。
---------------------------------------------------------------------- #!/bin/sh echo Content-type: text/html echo '' echo "<html><head><title>Guest Book</title></head><body>" ./gbm -init echo "</body></html>" ----------------------------------------------------------------------
背景を変えたかったら↑の <body> のところを適当に変える べし。で、gbm自身の名前がある $html という変数があるのでこれを変 更する。具体的には、gbconf.pl に $html = "gbm.cgi"; という一行を 加える。
どうもangelとかはそうらしい。gbmのブックファイル生成は出来る ものの、ftpでファイル転送しようと思うと@マークを弾かれてしまうら しい。そういうときは、gbconf.pl に次の行を足してみる。
$atmarkalt = ":";すると書き込みファイル作成時に@マークを使わないようになる。
ぢゃあチェックリスト。
$tojis="/opt/bin/nkf"; $toeuc="/opt/bin/nkf -e";のように書くべし。また、rndmsg.pl にも nkf のPATH記述があ るのでそこを
$nkf = "/opt/bin/nkf";と変更すべし。
変数 $sendmail に sendmail コマンドの位置をちゃんと指定しても 「書き込みがあったよ」通知メイルが送られない場合があるらしい。そ んなときは
いつもランダムな返事ばかりではつまらない。そう嘆いているちみ にプレゼントだ。answer.pl というファイルを用意してその中で answer という関数を定義するとgbmはお返事作成のときにその関数を使 うようになる。answer.plの大体の形はこんな感じになる。
----ここから---------------------------------------------------------- sub answer { local($email, $url, $name, $odai, $mes) = @_; # ↑で各変数にそれぞれ、 # (メイルアドレス, ホームページURL, 名前, お題, 書き込み) # が入るので、それを元に返事となる文字列を生成する "文字列" # で最後にその文字列を返しておしまい } 1; # ファイル末の 1; を忘れずに ----ここまで----------------------------------------------------------
あ、ちなみに関数末で "" や 0 を返すとデフォルトのランダムメッ セージを採用するのでうまく利用すると良い。まあ、これをやろうって いうちみはぴろぞーさんレベルなのでこれ以上説明せんでもわかるっす な。おしまい。
相手によって御題を切り替えたいとな。まったくもう。
普通の御題は FIELD というタグに列挙していく。が特定のドメイン から来た人に特定の御題リストを出したいときは、
FIELD.*.domain.or.jp やーおはよー 待ってたよーのように書くよろし。*.domain.or.jp からのアクセスに対する御題と なる。ちなみに . と * は正規表現の . と * なので、うるさいことを いうと上の書き方は間違い。正規表現的に正しく書くなら
FIELD\..*\.domain\.or\.jpとしなければならないが、最初の例でもたまたま . の次に * がくるし 裸のピリオドはピリオド自身にも一致するのでうまいぐあいにマッチし て結果オーライである。また、IPアドレスでも書けて、
FIELD.131.113.37 管理の授業厳しい? ほげーとすると、131.113.37.* にたいする御題となる。netmaskを考慮しよう かと思ったけどめんどいのでやめ。そのかわり正規表現つかえるので厳 密に制御したいときは FIELD.131.113.16.3[0-5] みたいにしてちょ。 もしくは次の、再帰タグをつこてちょ
一つのリストを複数のタグで参照できて
FIELD.gentei.org がっちゃんげんきー? おはよー FIELD.hoge.co.jp &FIELD.gentei.org
と、データ部分に &タグ と書くと、そのタグの持つリストを別名で参 照できるのだ。
あと、もうひとつ、
FIELD.yuuji@gentei.orgのように FIELD.メイルアドレス をタグにすると、そのメイルアドレス を持つ人に対する御題となる。あらかじめクッキー値でemailアドレス を焼いた人だけに有効ね。
ああんもう、わがままでちゅね〜
「ちみの愛称」と書き込み領域の間に任意個のフィールドを増やせ るようにしたんよ。じゃあ二個増やすとしよう。項目は、「愛車」、と 「今日の朝御飯」にするとしよう。
$Xfieldlist = "愛車,今日の朝御飯";上記の場合追加項目は、「愛車」、「今日の朝御飯」となる。
Xfield1.PROMPT 「のってるくるま」 「愛車」 「今日の足」 Xfield2.PROMPT 「あさめし」 「朝食ったもの」もし、入力フィールドの説明が「愛車」、「今日の朝御飯」のま までよいのなら Xfield?.PROMPTは定義しなくて良い。
$Xcookie_list = "1,2";なお、デフォルトで最初の五個の変数のクッキーを焼くようになっ ているので明示的に指定しないとほいほい焼かれることになっちゃ うのでちうい。
$Xfield1.PREFIX <center>「 $Xfield1.MIDDLE 」は、[ $Xfield1.SUFFIX ]</center>と設定すると
<center>「愛車」は、[さそり]</center>となる。
ほれ、結構面倒じゃろ。やめとけやめとけ。