#!/usr/bin/perl #↑ご自分の環境に合わせて設定して下さい。 ############################################################################### # Script written by Web新撰組 # Created on: 1996年4月15日 # E-MAIL taka@web-kyoto.com 鷹 #saport http://www.web-kyoto.com/ #多機能掲示板掲示板 $COPYRIGHT = <<"EOF"; Board CGI Ver 3.05 Created by Web新撰組 with Try-angle Mix EOF #最終アップデート2000年6月12日 #Ver.3.05 #2000/6/8 #アイコン機能追加 #2000/6/12 #レスに指定したアイコンが表示されない不具合を修正 #辞書登録機能追加 #2000/7/24 #ロボット画像を自由にリンク出来るように変更 #アイコン画像自由設定機能追加 #FTPで設定ファイルを変更する必要がある。 #menu.csvファイルが必要です。 #ファイルは、漢字コードEUCです。 #ファイルの記述は、http://www.web-kyoto.com/100/chat/no61/menu.csv #を参考にして下さい。パーミッションは、今後の為に606 or 666 #次は、設定画面から登録出来るように変更予定 #課題 #IP排除機能、禁止語処理、高機能サブルーチン(今は秘密)の追加 ############################################################################### ############################################# #デザインデータの呼び込み $setfile = 'set.dat'; &get_data; ############################################# ############################################# # 初期設定 ############################################# #jcode.plまでの相対パス require './jcode.pl'; #メッセージを格納するデータベースファイル $datafile = 'board.dat'; #この掲示板のファイル名 $cgi = 'board.cgi'; #イメージ格納DIR $imagedir ='images'; #バックグランドの画像ファイル $bg_gif = ''; #管理者削除モードのパスワード $password = '1234'; #クッキーを格納する名前を設定する $CookieName = 'CatBoradSystem'; ###チャットロボットの名前 #ロボットカラー ###キーワード辞書のパス $dic = './d.dat'; ###ぼけ辞書のパス $dic2 = './d2.dat'; #画像リンクファイル $imgfile = 'menu.csv'; #スタイルシート $style = <<"EOF"; EOF ############################################# # 初期設定ここまで ############################################# ############################################# # 検索フォーム ############################################# $search_form = <<"EOF";
EOF ############################################# # 時刻フォーマット ############################################# &time; ############################################# #フォームデータコンバート ############################################# 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; $value =~ s//-->/g; $value =~ s/\r\n/
/g; $value =~ s/img//ig; $value =~ s/imag//ig; $value =~ s/input//ig; $value =~ s/form//ig; $value =~ s/foformrm//ig; $value =~ s/script//ig; $value =~ s//form//ig; $value =~ s/applet//ig; $value =~ s/table//ig; $value =~ s/select//ig; $value =~ s/plaintext//ig; $value =~ s/\n//g; $value =~ s/\,/,/g; &jcode'convert(*value,'euc'); $FORM{$name} = $value; } ############################################# #クッキー読み込みサブルーチンの読み込み ############################################# &ReadCookie; ############################################# #掲示板データオープン ############################################# if (!open(IN,"$datafile")) { &error('データファイルが見つかりませんエラー100'); } if ($windows == 1){ @DATA = ; close(IN); }else{ flock(IN,2); @DATA = ; flock(IN,8); close(IN); } if (!open(MEMO,"$imgfile")) { &error('画像リンクファイルが有りません'); } if ($windows == 1){ @MENU = ; close(MEMO); }else{ flock(MEMO,2); @MENU = ; flock(MEMO,8); close(MEMO); } ############################################# #画像リンクサブルーチン呼び出し ############################################# &set_img; ############################################# #アクション分岐処理 ############################################# #新規投函表示 if ($FORM{'ACTION'} eq 'new') { &new_regist; } #検索処理 elsif ($FORM{'ACTION'} eq 'search') { &search; } #書き込み処理 elsif ($FORM{'ACTION'} eq 'regist') { ®ist;} # 詳細表示 elsif ($FORM{'ACTION'} eq 'detail') { &detail; } #Thled表示 elsif ($FORM{'ACTION'} eq 'thled') { &thled; } #デリート elsif ($FORM{'password'} eq $password && $FORM{'ACTION'} eq 'deletemode') { &deletemode; } #レスポンス用の表示 elsif ($FORM{'ACTION'} eq 'message') { &res_html; } #デリート処理 elsif ($FORM{'ACTION'} eq 'delete') { &delete; } #初期設定登録 elsif ($FORM{'ACTION'} eq 'set_ini') { &ini_regist; } #辞書登録 elsif ($FORM{'ACTION'} eq 'bot_t' && $FORM{'keyword'} ne '') { &an_w; &bot_t;} #辞書登録画面 elsif ($FORM{'ACTION'} eq 'bot_t') { &bot_t; } #初期設定 elsif ($FORM{'password'} eq $password && $FORM{'ACTION'} eq 'admin') { &admin; } #Formのアクションが無い時 if ($default eq '1'){ &detail; } if ($default eq '0'){ &thled; } exit; ############################################# #ヘッダー部分 ############################################# sub html_head { print "Content-type: text/html\n\n"; print <<"EOF"; $style $title
$title

EOF } ############################################# #新規の投函画面 ############################################# sub form { print <<"EOF";
EOF if($icon eq '1'){ print <<"EOF"; EOF } print <<"EOF";
お名前(ハンドル名):
E-mail:
Home Page URL:
お題:
あなたのイメージ:
メッセージ:
EOF } ############################################# #レスポンスの投函画面 ############################################# sub form2 { print <<"EOF";
EOF if($icon eq '1'){ print <<"EOF"; EOF } print <<"EOF";
お名前(ハンドル名):
E-mail:
Home Page URL:
お題:
あなたのイメージ:
メッセージ:
EOF } ############################################# #リンクナビゲーションバー(表示方法のリンク) ############################################# sub linknavi { print <<"EOF"; EOF if($bot_admin eq '1'){ print <<"EOF";
$search_form
EOF } print <<"EOF";
EOF } ############################################# #管理画面 ############################################# sub admin{ &html_head; &linknavi; print <<"EOF";
あなたのホームページアドレス
掲示板の名前
テーブルカラー
バックグランドカラー
テキストの文字色
リンク文字色
Vリンク文字色
Aリンク文字色
コメント最大記憶数
1ページに表示する件数
ロボットの名前
ロボットカラー
初期画面表示設定
使用OS設定
アイコンの使用
常に投函画面を表示する
タイトル文字色
タイトル文字のサイズ(ピクセル)
誰にでも、辞書を登録させる
辞書登録個数
ロボット画像リンク(URLでも良い)

EOF &delete_form; &html_foot; exit; } ############################################# #削除画面 ############################################# sub deletemode { if($FORM{'password'} ne $password){ &error('パスワードが違います。エラー105'); } $count = @DATA; if ($count < 1) { exit; } &html_head; print <<"EOF"; $count

削除ナンバー:
スペースで区切って複数を削除出来ます。

EOF foreach $line (@DATA) { ($date,$number,$nextnumber,$re,$name,$email,$HP,$subject,$botmess,$message,$kaogif) = split(/\,/,$line); print "\n"; print "\n"; print "\n"; print "\n"; print "
【$number】\n"; print "$subject\n"; print " 投稿者:\n"; if ($email ne '') { print "" . $name . "\n"; } else { print "" . $name . "\n"; } print " 投稿日:" . $date . "
\n"; print "$message\n"; print "
\n"; print "
\n"; } &html_foot; exit; } ################################################# #HTMLフッター表示 ################################################# sub html_foot { print <<"EOF";

$COPYRIGHT

EOF } ################################################# #エラー表示サブルーチン ################################################# sub error { local($msg) = @_; &html_head; print <<"EOF";
ERROR !!

$msg 

ブラウザーの戻るボタンで戻って下さい。

EOF exit; } ################################################# #管理画面フォーム ################################################# sub admin_form{ print <<"EOF";
EOF } ################################################# #削除管理画面フォーム ################################################# sub delete_form{ print <<"EOF";
EOF } ############################################# #詳細表示 ############################################# sub detail { foreach $line (@DATA) { ($date,$number,$nextnumber,$re,$name,$email,$HP,$subject,$botmess,$message) = split(/\,/,$line); if ($re < 1) { push(@HIT,$line); } } $hit = @HIT; &html_head; &linknavi; if($posting eq '1'){ &form;} &listvew; &admin_form; &html_foot; exit; } ############################################# #スレッド表示 ############################################# sub thled { foreach $line (@DATA) { ($date,$number,$nextnumber,$re,$name,$email,$HP,$subject,$botmess,$message,$kaogif) = split(/\,/,$line); if ($re < 1) { push(@HIT,$line); } } $hit = @HIT; &html_head; print "
\n"; &linknavi; if($posting eq '1'){ &form;} @DATA = reverse(@DATA); if ($FORM{'pline'} eq '') { $pline = 0; } else { $pline = $FORM{'pline'}; } $dend = $hit - 1; $pend = $pline + ($pageview -1); if ($pend >= $dend) { $pend = $dend; } foreach ($pline .. $pend) { ($date,$number,$nextnumber,$res,$name,$email,$HP,$subject,$botmess,$message,$kaogif) = split(/\,/,$HIT[$_]); print "\n"; print "
\n"; print "$subject\n"; if ($email ne '') { print " " . $name . "\n"; } else { print " $name\n"; } print " \n"; if ($HP ne '') { print " "; } print " $date\n"; print "
\n"; $i = 1; foreach $line (@DATA) { ($da,$co,$nxco,$re,$na,$em,$H,$su,$bo,$mess,$kaog) = split(/\,/,$line); if ($number eq $re) { if ($i == 1) { $ulflag = 1; print "
    \n"; } else { print "
    \n"; } print "\n"; if ($em ne '') { print "$su" . $na . "\n"; } else { print "$su" . $na . "\n"; } print " \n"; if ($H ne '') { print " \n"; } print " $da\n"; print "\n"; $i++; } } if ($ulflag == 1) { print "
\n"; } print "

\n"; } $next_pline = $pend +1; if ($pend ne $dend) { print "
\n"; print " \n"; print "\n"; print "\n"; print "
\n"; } &admin_form; &html_foot; exit; } ############################################# #詳細データ表示処理 ############################################# sub listvew { @DATA = reverse(@DATA); if ($FORM{'pline'} eq '') { $pline = 0; } else { $pline = $FORM{'pline'}; } $dend = @HIT - 1; $pend = $pline + ($pageview -1); if ($pend >= $dend) { $pend = $dend; } foreach ($pline .. $pend) { ($date,$number,$nextnumber,$res,$name,$email,$HP,$subject,$botmess,$message,$kaogif) = split(/\,/,$HIT[$_]); $message =~ s/([^=^\"]|^)((http|https|ftp|mailto):[\@!#-9A-~]+)/$1$2<\/a>/g; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print ""; } print <<"EOF";
\n"; print "$subject\n"; if ($email ne '') { print " " . $name . "\n"; } else { print " $name\n"; } print " \n"; if ($HP ne '') { print " "; } print " $date\n"; if ($FORM{'ACTION'} ne 'message') { print "

EOF if($icon eq '1'){ print <<"EOF"; EOF } print <<"EOF"; $message

EOF if($icon eq '1'){ print <<"EOF";
EOF } print <<"EOF"; $bot
$botmess
EOF $i = 1; foreach $line (@DATA) { ($da,$co,$nxco,$re,$na,$em,$H,$su,$bo,$mess,$kaog) = split(/\,/,$line); if ($number eq $re) { if ($i == 1) { $ulflag = 1; print "
"; print "
    \n"; } else { print "
    \n"; } $mess =~ s/([^=^\"]|^)((http|https|ftp|mailto):[\@!#-9A-~]+)/$1ここです。<\/a>/g; print "\n"; if ($em ne '') { print "" . $na . "\n"; } else { print "" . $na . "\n"; } print " \n"; if ($H ne '') { print " \n"; } print " $da\n"; print "
    \n"; print <<"EOF";
    EOF if($icon eq '1'){ print <<"EOF"; EOF } print <<"EOF"; $mess

    EOF if($icon eq '1'){ print <<"EOF";
    EOF }else{ "\n"; } print <<"EOF"; $bot
    $bo
    EOF $i++; } } if ($ulflag == 1) { print "
\n"; } print "
\n"; } $next_pline = $pend +1; if ($pend ne $dend) { print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; } } ################################################# #検索画面表示 ################################################# sub search { @DATA = reverse(@DATA); if ($FORM{'ACTION'} eq "search") { $kw = $FORM{'kw'}; &jcode'convert(*kw,'euc'); foreach $line (@DATA) { $value = $line; if ($kw =~ m/[\*\{\}\=\&\@\~\>\<\#\%\"\'\`\(\)\[\]\\\/\:\;\_\,]/){ &error('変なキーワード入力しないで。エラー107'); } if ($value =~ /$kw/i) { push(@HIT,$line); } } } else { @HIT = @DATA; } &html_head; &linknavi; print"検索ワード:$kw\n"; if ($FORM{'line'} eq '') { $line = 0; } else { $line = $FORM{'line'}; } $dcount = @HIT - 1; $pend = $line + ($pageview-1); if ($pend >= $dcount) { $pend = $dcount; } foreach ($line .. $pend) { ($date,$number,$nextnumber,$re,$name,$email,$HP,$subject,$botmess,$message,$kaogif) = split(/\,/,$HIT[$_]); print <<"EOF";
$number:題名:$subject 投函者: EOF if ($email ne "") { print "$name\n"; } else { print "$name\n"; } print <<"EOF"; $date

$message

EOF } $page_line = $pend +1; if ($pend ne $dcount) { print <<"EOF";

EOF } print <<"EOF";
EOF &html_foot; exit; } ############################################# #レスポンス用表示 ############################################# sub res_html { foreach $line (@DATA) { ($date,$number,$nextnumber,$re,$name,$email,$HP,$subject,$botmess,$message,$kaogif) = split(/\,/,$line); if ($number == $FORM{'res'}) { push(@HIT,$line); last; } } &html_head; &linknavi; &listvew; &form2; &html_foot; exit; } ############################################# #新規投函用表示 ############################################# sub new_regist { &html_head; &linknavi; &form; &html_foot; exit; } ############################################# #辞書登録 ############################################# sub bot_t { if (!open(DB,"$dic")) { &error('データファイルが見つかりませんエラー109'); } if ($windows == 1){ @DATA = ; close(DB); }else{ flock(DB,2); @DATA = ; flock(DB,8); close(DB); } &html_head; &linknavi; print <<"EOF";
あなたのセンス良い登録をお待ちしております。

キーワードに教えたい項目を、
返事にキーワードに対する返事を入力して下さい。
キーワード(例:おはよう)
正規表現を選択します。 チェックボタンを選択してください。
EOF print "正規表現無し"; print "\t\t先頭にヒット\n"; print "\t\t後ろにヒット\n"; print <<"EOF";
返事(例:ynameさんおはよう)
EOF if ($keyword ne "") { print "$keywordに対する返事を、
$responseと記憶しました。

\n"; } #HTML出力 foreach $line (@ines) { ($keyword,$response,$ip) = split(/ \^: /,$line);##改造IP追加 $keyword =~ s//>/g; $keyword =~ s/"/"/g; $response =~ s//>/g; #$response =~ s/"/"/g; $response =~ s/img//ig; $response =~ s/imag//ig; $response =~ s/input//ig; $response =~ s/form//ig; $response =~ s/foformrm//ig; $response =~ s/script//ig; $response =~ s//form//ig; $response =~ s/applet//ig; $response =~ s/table//ig; $response =~ s/select//ig; $response =~ tr/+/ /; $response =~ s/select//ig; $response =~ s/plaintext//ig; $response =~ s/enb//ig; $ip =~ tr/+/ /; } print <<"EOF";

言葉登録の際のご注意


  1. 品性下劣な言葉や単なる罵詈雑言、公序良俗に反する言葉の登録はお断りいたします。

  2. 「キーワード」「返事」共に、空白状態での登録は出来ません。

  3. 記号・半角カタカナの入力はしないで下さい。

  4. キーワードは、3文字以上でお願いします。
    3文字以下のキーワードは、不必要なヒットが多くなる為受け付けません。

  5. 人工無能の返事の中で、あなたのお名前を呼ばせたい場合は、半角英小文字でynameと入力して下さい。

    例)
    キーワード「こんにちわ」で
    返事を「ynameさん、いらっしゃい」と登録すると、
    ボード上でAさんが「こんにちわ」と発言した時に人工無能は
    「Aさん、いらっしゃい」と返事します。

  6. 同一のキーワードで、複数の返事を登録する事が出来ます。
    その場合、あなたの発言のキーワードに対する返事の中から、どれかをランダムに選んで返して来ます。
    その為、あなたの登録した言葉を必ず返してくるとは限りません。
    ご了承下さい。

  7. 当ボードに不適当であると私が判断した言葉は、断り無く抹消される場合があります。
    ご了承下さい。



ちょっとした登録のテクニック


「人工無能」は、キーワードに正規表現を使って言葉を覚えさせると、ちょっと凝った返事を覚える事が出来ます。
その例を以下に挙げます。
  1. 先頭にヒット「^

    例えば、キーワード「^だれが」に対して「誰でもええやん」というお返事を登録したとします。
    すると、「だれがそんな事言ったの?」にはヒットしますが「そんな事だれが言ったの?」にはヒットしません。

  2. 末尾にヒット「\$

    例えば、キーワード「どうして?\$」に対して「自分でもようわからへん」と登録したとします。
    すると、「踊ってるのはどうして?」にはヒットしますが、「どうして?どうしてそんな事いうの?」にはヒットしません。

  • 上記のふたつは、登録フォームのラジオボタンで選択する事が出来ます
    この場合、わざわざ「^」とか「\$」とかを入力する必要はありません
    ラジオボタンで「先頭」か「後ろ」かを選択すれば、登録する時に自動的に正規表現を追加します。
  1. どちらかにヒット「|

    例えば、キーワード「あほか|アホか」に対して「ひどい、ひどいわ!!」と登録したとします。
    すると、「あほか」にも「アホか」にもヒットします。

  • 上記3〜5の正規表現を用いる時は、必ず半角英小文字で記入して下さい
    全角だと、正規表現として認識する事が出来ません。

正規表現をいくつか使って、ちょっと複雑な登録の仕方も出来ます。
いろいろやってみて下さい。
もしも失敗して、ワケわからん事になってしまったら、速やかに管理人に連絡下さいね。(^_^;;;


EOF &admin_form; &html_foot; exit; } sub an_w { $ip = $ENV{ 'REMOTE_ADDR' }; $regu = $FORM{'regu'}; $keyword = $FORM{'keyword'}; $response = $FORM{'response'}; # ynameはキーワードに入れるんじゃないよ &error('キーワードにc_nameを登録する事は無意味です。c_nameは、返事の方に半角小文字で記入して下さい。') if($keyword =~ m/\yname/ || $keyword =~ m/\yname/ || $keyword =~ m/\YNAME/ || $keyword =~ m/\YNAME/); # c_nameは半角小文字で登録してくれよ &error('c_nameは、半角小文字で記入して下さい。') if($res =~ m/\yname/ || $res =~ m/\YNAME/ || $res =~ m/\YNAME/); # キーワード短すぎだよ &error('キーワードが短かすぎるので登録しませんでした。3文字より短いキーワードは不必要なヒットが多くなるため受け付けません。') if (length($keyword) < 6); # おいおい。お返事カラだよ &error('返事が空白のままです。') if ($response eq ''); # 変な文字入れるなよ &error('キーワードの中に、スラッシュや括弧などの半角の記号類が含まれていたので登録しませんでした。') if ($keyword =~ m/[\{\}\=\&\@\~\>\<\#\%\"\'\`\(\)\[\]\\\/\:\;\_\,]/); # わかってないなら正規表現使うなよ &error('^$は、使用する事は出来ません!!') if ($keyword =~ m/\$.+/ || $keyword =~ m/[^\^]+\^/); #正規表現の分岐 if ($regu == 0){$keyword = "$keyword";} if ($regu == 1){$keyword = "\^$keyword";} if ($regu == 2){$keyword = "$keyword\$";} if (!open(DB,"$dic")) { &error('辞書データファイルが見つかりませんエラー109'); } @lines = ; close(DB); $i = 0; foreach $line (@lines) { $i++; if ($i == $dicmax) { last; } push(@new,$line); } $value = "$keyword\:$response\:$ip\n"; unshift(@new,$value); if (!open(DB,">$dic")) { &error('辞書データファイルが見つかりませんエラー109'); } print DB @new; close(DB); } ############################################# #フォーム入力処理(保存方法) ############################################# sub regist { &SetCookie; if ($FORM{'name'} eq '') { &error('名前を入力して下さい。エラー102'); } if ($FORM{'message'} eq '') { &error('何かメッセージを書き込んで下さい。エラー103'); } if ($FORM{'message'} ne '') { $count = @DATA; if ($count >= $max) { pop(@DATA); } if ($count < 1) { $new_number = 1; $next_number = 2; } else { ($date,$number,$nextnumber,$re,$name,$email,$HP,$subject,$botmess,$message,$kaogif) = split(/\,/,$DATA[0]); #辞書サブルーチン呼び出し &dic; $new_number = $nextnumber; $next_number = $nextnumber +1; } $value = "$date_now\,$new_number\,$next_number\,$FORM{'res'}\,$FORM{'name'}\,$FORM{'email'}\,$FORM{'HP'}\,$FORM{'subject'}\,$botmess\,$FORM{'message'}\,$FORM{'kaogif'}\n"; $i = 0; $hit = 0; foreach $line (@DATA) { ($date,$number,$nextnumber,$re,$name,$email,$HP,$subject,$botmess,$message,$kaogif) = split(/\,/,$line); if ($number == $FORM{'res'} && $FORM{'res'} > 0) { $i_value = "$date\,$number\,$next_number\,$re\,$name\,$email\,$HP\,$subject\,$botmess\,$message\,$kaogif"; splice(@DATA,$i,1); unshift(@DATA,$i_value); last; } $i++; } unshift(@DATA,$value); if (!open(IN,">$datafile")) { &error('データファイルが見つかりません。エラー104'); } print IN @DATA; close(IN); } $FORM{'res'} = 0; } ############################################# #削除処理 ############################################# sub delete { $FORM{'delnumber'} =~ s/ / /g; @DELNUM = split(/ /,$FORM{'delnumber'}); $keycount = @DELNUM; if ($keycount < 1) { &thled; } foreach $line (@DATA) { ($date,$number,$nextnumber,$re,$name,$email,$HP,$subject,$botmess,$message,$kaogif) = split(/\,/,$line); $hit = 0; foreach $delnumber (@DELNUM) { if ($number == $delnumber) { $hit = 1; } } if ($hit == 0) { push (@POOL,$line); } } if (!open(DB,">$datafile")) { &error('ファイルが見つかりません。エラー106'); } print DB @POOL; close(DB); @DATA = @POOL; } ############################################# #辞書検索のサブルーチン ############################################# sub dic { srand(time); if (!open(dic,$dic)) { $botmess = "Dictionary file cannot open."; } else { @dic=; close(dic); foreach (@dic) { chop; ($in,$out)=split(/:/); if ($FORM{'message'} =~ /$in/) { push(@NEW,$_); } } if (@NEW) { ($in,$out) = split(/:/,splice(@NEW, rand @NEW, 1)); $out =~ s/yname/$FORM{'name'}さん/g; $botmess = "$out"; } else { if (!open(dic2,$dic2)) { $botmess = ""; } else { @dic2=; close(dic2); ($botmess = splice(@dic2, rand @dic2, 1)) =~ s/yname/$FORM{'name'}さん/g; chop($botmess); } } } } ################################################# # クッキーの書き込み ################################################# sub SetCookie{ local($c_uname,$c_mailadd,$hp)=@_; local($set_cookie_value); $c_uname = $FORM{'name'}; $c_uname =~ s/\=/Enc_eq/g; $c_uname =~ s/\:/Enc_colon/g; $c_uname =~ s/\;/Enc_semicolon/g; $c_mailadd = $FORM{'email'}; $c_mailadd =~ s/\=/Enc_eq/g; $c_mailadd =~ s/\:/Enc_colon/g; $c_mailadd =~ s/\;/Enc_semicolon/g; $hp = $FORM{'HP'}; $hp =~ s/\=/Enc_eq/g; $hp =~ s/\:/Enc_colon/g; $hp =~ s/\;/Enc_semicolon/g; $c_readed =~ s/\=/Enc_eq/g; $c_readed =~ s/\:/Enc_colon/g; $c_readed =~ s/\;/Enc_semicolon/g; $set_cookie_value="uname:$c_uname,email:$c_mailadd,hp:$hp,readed:$c_readed"; print "Set-Cookie: $CookieName=$set_cookie_value; expires=Thursday, 1-Jun-2020 00:00:00 GMT;\n"; } ################################################# # クッキーの読み込み ################################################# sub ReadCookie{ local($name,$value,$pair,@pairs,%COOKIES); @pairs = split(/\;/,$ENV{'HTTP_COOKIE'}); foreach $pair (@pairs){ local($name,$value) = split(/\=/,$pair); $name =~ s/Enc_eq/\=/g; $value =~ s/Enc_eq/\=/g; $name =~ s/ //g; $COOKIES{$name} = $value; } foreach (split(/\,/,$COOKIES{"$CookieName"})){ local($name,$value) = split(/\:/); $name =~ s/Enc_colon/\:/g; $name =~ s/Enc_semicolon/\;/g; $value =~ s/Enc_colon/\:/g; $value =~ s/Enc_semicolon/\;/g; $value=~s/\n//g; $COOKIE{$name} = $value; } } ################################################# #時刻フォーマット ################################################# sub time{ $time=time; $gtime=$time + (9*3600); @week=('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); ($min,$hour,$mday,$mon,$year,$wday)=(gmtime($gtime))[1..6]; $mon++; $year += 1900; if($min < 10){ $min = '0' . $min;} if($hour < 10) { $hour = '0' . $hour;} if($mday < 10) { $mday = '0' . $mday;} if($mon < 10) { $mon = '0' . $mon;} $date_now=$year . '年' . $mon . '月' . $mday . '日(' . $week[$wday] . ') ' . $hour . ':' . $min; } ################################################# #画像リンクセット ################################################# sub set_img { foreach $pair (@MENU) { ($name, $value) = split(/\,/, $pair); $IMGMENU{$name} = $value; } } ################################################# #初期設定のロード ################################################# sub get_data { if(!open(GET, "$setfile")) { &open_error; } @data = ; close(GET); $homepage = $data[0]; $homepage =~ s/\n//g; $homepage =~ s/\r//g; $title = $data[1]; $title =~ s/\n//g; $btitle =~ s/\r//g; $td_color = $data[2]; $td_color =~ s/\n//g; $td_color =~ s/\r//g; $bg_color = $data[3]; $bg_color =~ s/\n//g; $bg_color =~ s/\r//g; $text_color = $data[4]; $text_color =~ s/\n//g; $text_color =~ s/\r//g; $link_color = $data[5]; $link_color =~ s/\n//g; $link_color =~ s/\r//g; $vlink_color= $data[6]; $vlink_color =~ s/\n//g; $vlink_color =~ s/\r//g; $alink_color= $data[7]; $alink_color =~ s/\n//g; $alink_color =~ s/\r//g; $max = $data[8]; $max =~ s/\n//g; $max =~ s/\r//g; $pageview = $data[9]; $pageview =~ s/\n//g; $pageview =~ s/\r//g; $bot = $data[10]; $bot =~ s/\n//g; $bot =~ s/\r//g; $bot_color = $data[11]; $bot_color =~ s/\n//g; $bot_color =~ s/\r//g; $default = $data[12]; $default =~ s/\n//g; $default =~ s/\r//g; $windows = $data[13]; $windows =~ s/\n//g; $windows =~ s/\r//g; $icon = $data[14]; $icon =~ s/\n//g; $icon =~ s/\r//g; $posting = $data[15]; $posting =~ s/\n//g; $posting =~ s/\r//g; $title_color= $data[16]; $title_color =~ s/\n//g; $title_color =~ s/\r//g; $title_size = $data[17]; $title_size =~ s/\n//g; $title_size =~ s/\r//g; $bot_admin = $data[18]; $bot_admin =~ s/\n//g; $bot_admin =~ s/\r//g; $dicmax = $data[19]; $dicmax =~ s/\n//g; $dicmax =~ s/\r//g; $botimg = $data[20]; $dbotimg =~ s/\n//g; $botimg =~ s/\r//g; } ################################################# #初期設定登録処理 ################################################# sub ini_regist{ if ( $FORM{'password'} eq $password ){&ini_html; }else{&ini_bat; exit(1);} sub ini_html { $homepage = $FORM{"homepage"}; $title = $FORM{"title"}; $td_color = $FORM{"td_color"}; $bg_color = $FORM{"bg_color"}; $text_color = $FORM{"text_color"}; $link_color = $FORM{"link_color"}; $vlink_color = $FORM{"vlink_color"}; $alink_color = $FORM{"alink_color"}; $max = $FORM{"max"}; $pageview = $FORM{"pageview"}; $bot = $FORM{'bot'}; $bot_color = $FORM{'bot_color'}; $default = $FORM{'default'}; $windows = $FORM{'windows'}; $icon = $FORM{'icon'}; $posting = $FORM{'posting'}; $title_color = $FORM{'title_color'}; $title_size = $FORM{'title_size'}; $bot_admin = $FORM{'bot_admin'}; $dicmax = $FORM{'dicmax'}; $botimg = $FORM{'botimg'}; if(!open(IN,">set.dat")){ &error('初期設定ファイルが見つかりません。エラー108'); } print IN "$homepage\n"; print IN "$title\n"; print IN "$td_color\n"; print IN "$bg_color\n"; print IN "$text_color\n"; print IN "$link_color\n"; print IN "$vlink_color\n"; print IN "$alink_color\n"; print IN "$max\n"; print IN "$pageview\n"; print IN "$bot\n"; print IN "$bot_color\n"; print IN "$default\n"; print IN "$windows\n"; print IN "$icon\n"; print IN "$posting\n"; print IN "$title_color\n"; print IN "$title_size\n"; print IN "$bot_admin\n"; print IN "$dicmax\n"; print IN "$botimg\n"; close(IN); print "Content-type: text/html\n\n"; print "\n"; print <<"EOF"; デザイン完了

デザイン完了


データ設定中!暫くお待ち下さい。 EOF exit; } sub ini_bat { print "Content-type: text/html\n\n"; print <<"EOF"; デザイン失敗 パスワードが違います。ブラウザの戻るで戻って、
設定をやり直してください。 EOF exit; } exit; }