99章.お役立ちperlプログラム

99.5.チャット(NChat: no frame only)

チャットスクリプトです。

チャットのCGIは同時に書き込むと内容が消えたり,消滅対策のロック(symlinkやsleep)により待たされたり=BUSYと大変です。

このスクリプトは,そのようなロック機能を省いて作成されていますので高レスポンスが期待できます。

デモはこちらです。

99.5.1.アルゴリズム(著作権利の主張部分)

99.5.2.主な特徴
  1. リモートホストやアドレスによって書き込みを制限できる
  2. 他所に置いたフォームからの書き込みはできない
  3. 最大書き込み字数の指定
  4. 全角のスペースは半角のスペースに置換されます
    また,連続する半角スペースは1文字になります
  5. 改行は効きません
99.5.3.レコードレイアウト
名前<mailアドレス<本文<時刻とリモートアドレス<リモートホスト(改行:LF)

各項目の区切りには(<)を利用しています。
タグ機能(<〜>)の利用を禁止し,漢字コードを(sjis or euc)にして記録することが必要です。

漢字コードはEUCかSJISコードが一般的に利用されています。
EUCコードはJIS 2バイトコードに0x8080を論理和したもので,SJISコードは,ある規則でJIS 2バイトコードを変換(写像)しています。
EUCコードは,(上位バイト:0xA0〜,下位:0xA0〜)の範囲にあり,SJISコードは,(上位バイト:0x81〜0x9F,下位:0x40〜0xFC)と(上位バイト:0xE0〜0xEF,下位:0x40〜0xFC)の範囲にあります。
<を区切りに使えるのは,(sjis or euc)を構成する各バイトでは利用されないコードだからです。
また,&lt;で代用が効くからです。

99.5.4.制限事項

以下の条件を満足する環境および利用方法でないと正常に動作しません。

  1. flock関数が利用できること
  2. タグ機能の利用を禁止すること=(<と>)はそれぞれ(&lt;と&gt;)に変換される
    タグとして機能しないだけなので,本文中に(<や>)の文字は書けますよ
  3. ファイルへ記録する漢字のコードは(sjis or euc)のみ
99.5.5.設置方法

nchat.txt チャットスクリプト nchat.pl

をダウンロード後に,自分の環境に合わせて修正して下さい。

主な修正箇所はスクリプト名,各ファイルのパス,設置したスクリプトの絶対パスと最大件数・字数などです。
相手先ドメインによる書き込み制限も同時に指定します。既定値は無制限。

require './jcode.pl';
$base = 'http://www2s.biglobe.ne.jp/~kibita/cgi-bin/'; #スクリプトのパス
$pg = '970525.cgi'; #スクリプト名
$file = './xxx.txt'; #ログファイル
$max = 50; #最大件数
$mmax = 200; #1メッセージの最大字数(半角換算)

#ずっと下にある書き込み制限のブロック
      DENY: {
# REMOTE_HOST
#       if ($rh =~ /\.zzz\.(or|ne)\.jp/i) { $acl = 2; last DENY; }
#       if ($rh =~ /\.interq\.(or|ne)\.jp/i) { $acl = 2; last DENY; }
#       if ($rh =~ /\.eznet\.(or|ne)\.jp/i) { $acl = 2; last DENY; }
#       if ($rh =~ /\.interwave\.(or|ne)\.jp/i) { $acl = 2; last DENY; }

# REMOTE_ADDR
#       if ($ra =~ /^123\.456\.789\./) { $acl = 2; last DENY; }
#       if ($ra =~ /^123\.456\./) { $acl = 2; last DENY; }
      }

修正したスクリプトと空ファイルをftpで/home/foo/cgi-bin(任意)ディレクトリへ転送後に

kibita(*)cd /home/foo/cgi-bin
kibita(*)mv nchat.txt nchat.cgi
kibita(*)chmod 705 nchat.cgi
kibita(*)chmod 606 xxx.txt

とします。

シェルが利用できない場合は,chmodの代わりにftpソフトのquoteコマンドを利用します。

put nchat.txt nchat.cgi
quote site chmod 705 nchat.cgi
put xxx.txt
quote site chmod 606 xxx.txt


BIGLOBEの方は,スクリプトをほとんど修正しなくてもよいです。

public_html--cgi-bin(700)--nchat.cgi(700)
                           xxx.txt  (600)
                           jcode.pl (600)
cgi-binがhtmlファイルを含む場合は,cgi-bin(705)です。

新規にファイルをオープンすると,パーミッションは(644)になります。
uidは/~UserIDのUserIDになります。
つまり,cgiの実行はUserIDの所有者のレベルで実行されるようです。


[HOME][戻る]

Copyright (c)1997 GOMASUKE
Since 05/25/1997, Last Updated 05/25/1997