#! /bin/perl # # ↑このパスはプロバイダによって違いますので注意 # # GuestBOOK version 1.01 # # Script written by Kazu Yanaka # Created on: 96年4月12日 # Last Modified on: 96年4月13日 # I can be reached at: rescue@sainet.or.jp # Scripts Found at: http://www.sainet.or.jp/~rescue/web/ # # このスクリプトはシェアウエアです!(試用期間1ヶ月) require 'jcode.pl'; ########################################################################################### # # 初期設定 # $file = "/www/httpd/html/gestbook/reg.dat"; # データファイルを指定 $method = "post"; # フォームのMethodを選択(リムネットなどpostが使えない場合はgetにする) $password = "luice"; # メンテナンス(データ削除)に移行する際に使われるパスワードを設定 # 登録後は送られてくるコードをいれてください。 $regist = "シェアウエア登録コード:0000-0000 登録日:00/00/00"; ########################################################################################### ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); if ($sec < 10) { $sec = "0$sec"; } if ($min < 10) { $min = "0$min"; } if ($hour < 10) { $hour = "0$hour"; } $month = ($mon + 1); print "Content-type: text/html\n\n"; if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } if ($buffer eq "") { &html; } else { &form; if ($FORM{'action'} eq "reg") { ®ist; &disp; } if ($FORM{'action'} eq "search") { &disp; } if ($FORM{'action'} eq "remove") { if ($FORM{'pass'} ne $password) { &error; } &remove; } if ($FORM{'action'} eq "delete") { &delete; &remove; } } sub html { if (!open(IN,"$file")) { &error; } @lines = ; $accesses = @lines; close(IN); print "ゲストブック\n"; print "\n"; print "

ゲストブック

\n"; print "
\n"; print "\n"; print "ご訪問ありがとうございます。記念にサインを残してください。\n"; print "また、ご感想やご意見もいただければ幸いです。(登録数$accesses件)

\n"; print "

\n"; print "名前:
\n"; print "eメールアドレス:
\n"; print "ホームページがあれば:
\n"; print "コメント:
\n"; print "


\n"; print "

\n"; print "\n"; print "

登録リスト

\n"; print "登録していただいた方々のリストです。文字列で検索したい場合は記入してください。

\n"; print "

\n"; print "検索文字列:

\n"; print "新しいものからリスト
\n"; print "古いものからリスト

\n"; print "


\n"; print "
\n"; print "\n"; print "メンテナンス用パスワード: "; print "\n"; print "

Script written by k_yanaka and can be found at ネットサーフレスキュー[Web裏技]
\n"; print "$regist
\n"; print "\n"; exit; } sub form { @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/"/"/g; $value =~ s/\n//g; $value =~ s/\*//g; $value =~ s/^//g; $name =~ tr/+/ /; $name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; } } sub regist { $FORM{'how'} = "new"; $date_now = "$year年$month月$mday日 $hour時$min分$sec秒"; &jcode'convert(*date_now,'sjis'); $name=$FORM{'name'}; &jcode'convert(*name,'sjis'); $name =~ s/ //g; $name =~ s/ //g; if ($name eq "") { &quit; } $email=$FORM{'email'}; $email =~ s/ //g; if ($email ne "") { if ($email =~ /@/) { ; } else { &quit; } } $page=$FORM{'page'}; $page =~ s/ //g; if ($page ne "") { if ($page =~ m#http://#) { ; } else { &quit; } } $comment=$FORM{'comment'}; &jcode'convert(*comment,'sjis'); $agent = $ENV{'HTTP_USER_AGENT'}; if (!open(OUT,">>$file")) { &error; } flock(OUT,2); print OUT "\[$date_now\] $name ^ $email ^ $page ^ $comment ^ $agent\n"; close(OUT); } sub error { print "ゲストブック\n"; print "\n"; print "

ゲストブック

\n"; print "処理に何らかのエラーが発生し、作業は中止されました。\n"; print "


\n"; print "\n"; exit; } sub quit { print "ゲストブック\n"; print "\n"; print "

ゲストブック

\n"; print "名前が入力されていない、または、eメールアドレスやホームページURLの\n"; print "形式が間違っているために、登録えきませんでした。[BACK]で戻ってもう一度登録してください。\n"; print "


\n"; print "\n"; exit; } sub disp { if ($FORM{'string'} ne "") { $i = 0; $string=$FORM{'string'}; &jcode'convert(*string,'sjis'); } if (!open(IN,"$file")) { &error; } @lines = ; $accesses = @lines; close(IN); if ($FORM{'how'} eq "new") { @LOG = reverse(@lines); } else { @LOG = @lines; } print "ゲストブック\n"; print "\n"; print "

ゲストブック

\n"; if ($FORM{'how'} eq "new") { print "新しい書き込みからリストします。

\n"; } else { print "古い書き込みからリストします。

\n"; } foreach $line (@LOG) { if ($line =~ /\[(.*)\] (.*) \^ (.*) \^ (.*) \^ (.*) \^ (.*)/) { $date = $1; $name = $2; $email = $3; $page = $4; $comment = $5; $agent = $6; if ($string eq "") { &disp2; } else { if ($line =~ /$string/) { $i++; &disp2; } } } } print "

\n"; if ($string ne "") { print "<$accesses件中$i件のデータが抽出されました>

\n"; } else { print "<全部で$accesses件の登録があります>

\n"; } print "\n"; } sub disp2 { print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; if ($page eq "" || $page eq "http://") { ; } else { print "\n"; print "\n"; print "\n"; } if ($comment ne "") { print "\n"; print "\n"; print "\n"; } print "\n"; print "\n"; print "\n"; print "
\n"; if ($email ne "") { print "$name "; } else { print "$name "; } print " \n"; print "$date\n"; print "
\n"; print "$page "; print "
\n"; print "$comment\n"; print "
\n"; print "$agent\n"; print "

\n"; } sub remove { print "ゲストブック\n"; print "\n"; print "

メンテナンス

\n"; print "\n"; print "\n"; if (!open(IN,"$file")) { &error; } @lines = ; $accesses = @lines; close(IN); @LOG = reverse(@lines); print "全$accesses件

\n"; foreach $line (@LOG) { if ($line =~ /\[(.*)\] (.*) \^ (.*) \^ (.*) \^ (.*) \^ (.*)/) { $date = $1; $name = $2; print "$name($date)
\n"; } } print "

\n"; print "

\n"; print "\n"; } sub delete { if (!open(IN,"$file")) { &error; } @lines = ; close(IN); foreach $line (@lines) { if ($line =~ /\[(.*)\] (.*) \^ (.*) \^ (.*) \^ (.*) \^ (.*)/) { $date = $1; $name = $2; $email = $3; $page = $4; $comment = $5; $agent = $6; $user = "[$date] $name ^ $email ^ $page ^ $comment ^ $agent"; if ($FORM{$date} ne "delete") { push(@NEW,$user); } } } if (!open(OUT,">$file")) { &error; } flock(OUT,2); foreach (@NEW) { print OUT "$_\n"; } close(OUT); } ################################################################## end of script #########