#!/usr/local/bin/perl # # minichat.txt は minichat.cgi に名前変更してください。 ;# 簡易チャット version 5.2 ;# ;# This is Freeware. ;# Script written by Kazu.Y ;# Created on: 26/FEB/96 ;# I can be reached at: rescue@rescue.ne.jp ;# Scripts Found at: http://www.rescue.ne.jp/ # [基本仕様] # # ※ 旧バージョンとのデータ互換はありません. # ※ ファイルロック機能はありません. # [基本構成] ( )内はパーミッション値 # # /public_html/(ホームページディレクトリ) # | # |-- /cgi-bin/(任意のディレクトリ) # | # |-- jcode.pl (644) # |-- minichat.cgi (755) # |-- minichat.dat (666) # [履歴] # # v1.0 26/FEB/96 初版 # v4.0 09/JUN/98 # v5.0 30/NOV/98 JavaScript組み込み、データ構造の変更 # v5.1 01/DEC/98 JavaScriptエラー修正 # v5.2 16/JAN/99 JavaScriptの採用の有無設定可能に #----------------# # 初期設定 # #----------------# #◆名称 $title = '簡易チャット'; #◆設定 # 注意! の********の部分だけを設定します. $body = 'bgcolor=#ffeedd text=#000000'; #◆チャット表示行 $max = '30'; #◆画面に挿入するリンクURL $modoru = 'http://ホームページなどのURL/'; #◆画面に挿入するリンクの名称 $modoru_name = '戻る'; #◆入力方式 (標準:POST その他:GET) $method = 'POST'; #◆minichat.datのパス設定 $chat_file = './minichat.dat'; #◆日本語コード変換ライブラリ require './jcode.pl'; #◆JavaScriptを使った自動カーソルを 使う:1 使わない:0 $js = 1; #---------------------------------------------------------------------------- ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $date_now = sprintf("%02d時%02d分",$hour,$min); if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); $value =~ s//>/g; $value =~ s/\t//g; $FORM{$name} = $value; } print "Content-type: text/html\n\n"; print "$title\n"; if ($FORM{'name'} eq '' || $js == 0) { print "\n"; } else { print "\n"; } if ($FORM{'chat'} ne '' && $FORM{'name'} ne '') { if (!open(DB,"$chat_file")) { &error('システムエラー','チャットファイルが開けません.'); } @lines = ; close(DB); $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq $addr) { $host = gethostbyaddr(pack('C4',split(/\./,$host)),2) || $addr; } if ($max <= $#lines +1) { shift(@lines); } push(@lines,"$date_now\t$FORM{'name'}\t$FORM{'chat'}\t$FORM{'email'}\t$host\n"); if (!open(DB,">$chat_file")) { &error('エラー','チャットファイルへ記録できません.'); } print DB @lines; close(DB); } print "

$title

\n"; print "
\n"; if ($FORM{'name'} eq '') { print "チャットネーム \n"; print "

\n"; } else { print "\n"; print "$FORM{'name'} > "; print "

\n"; } print "


\n"; if (!open(IN,"$chat_file")) { &error('エラー','チャットファイルが開けません.'); } @DATA = ; close(IN); @DATA = reverse(@DATA); foreach $data (@DATA) { ($date,$name,$chat,$email,$host) = split(/\t/,$data); chop($host); $chat =~ s/(https?|ftp|gopher|telnet|whois|news)\:([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/$1\:$2<\/a>/ig; if ($email =~ /(.*)\@(.*)\.(.*)/) { print "$name > $chat ($date) \n"; } else { print "$name > $chat ($date) \n"; } print "
\n"; } print "[$modoru_name]

\n"; # このスクリプトの著作権表示(かならず表示してください) print "

MiniCHAT v5.2
\n"; print "

\n"; exit; sub error { print "

$_[0]

\n"; print "

$_[1]

\n"; print "データファイルの場所やパーミッションを確認してください.
\n"; print "このエラーの場合、JavaScriptエラーも同時に発生することがあります.

\n"; print "\n"; exit; }