#!/home/1/motchie/bin/perl $|=1; # スプールしない # ライブラリのロード use lib qw( /home/1/motchie/lib ); use LWP::Simple; use LWP::UserAgent; use HTTP::Request; use HTTP::Response; use Jcode; use Email::Valid; require 'get_title.pl'; require 'tcp.pl'; require 'web.pl'; require 'jcode.pl'; #require 'chkemail.pl'; require 'head.pl'; require 'foot.pl'; require 'cgi.pl'; require 'oops.pl'; # ---- 初期設定 ---- # URLのサーバの設定 $site = "http://www.motchie.com"; #$site = $cgi'SERVER_NAME; # ログファイルのファイル名の指定 $logfile = "list.dat"; $mylog = "mylog.dat"; $myadd = "webmaster\@motchie.com"; $sendmail = "/usr/sbin/sendmail"; #sendmailのパス if ($ENV{'REQUEST_METHOD'} eq "GET") { if ($ENV{'QUERY_STRING'} eq "") { &show_guestbook(); exit(0); }else{ exit(0); } } &cgi'Decode(); # デコード # 変数名を短くする $name = $cgi'TAGS{'name'}; #お名前 $place = $cgi'TAGS{'place'}; #お住まい $url = $cgi'TAGS{'url'}; #HomePage URL $address = $cgi'TAGS{'address'}; #E-mail Address $title = $cgi'TAGS{'title'}; #Homepage Title $memo = $cgi'TAGS{'comment'}; #Comments $image = $cgi'TAGS{'image'}; #Selected Image $add = $cgi'TAGS{'add'}; #E-mail Address を公開してもいいか $ok_u = $cgi'TAGS{'ok_u'}; #URL を公開してもいいか $method = $cgi'TAGS{'method'}; # 確認か書き込みか $autoget = $cgi'TAGS{'auto_get'}; # TitleをURLから自動取得する #------------------------------------------------------------------------------ # データ処理 #------------------------------------------------------------------------------ # イメージの処理 @images = ("home1.gif","kuma1.gif","star1.gif","earth1.gif","coara1.gif"); @size = ("32","40","40","32","40"); $imgsrc = $images[ $image-1 ]; $size = $size[ $image-1 ]; # E-mail Address の公開について if ($address eq "" || $address eq "(お返事をお出ししますので、正確にお願いします。)") { $add_comment = "持っていない"; } else { if ($add eq "yes"){ $add_comment = "公開してもいい"; } else { $add_comment = "公開しないでほしい"; } } # URL の公開について if ($url eq "" || $url eq "(ない場合は、このままで結構です。)") { $url_comment = "持っていない"; } else { if ($ok_u eq "yes"){ $url_comment = "公開してもいい"; } else { $url_comment = "公開しないでほしい"; } } # URL はあっても、タイトルがない if (($url ne "" && $title eq "")|| ($url ne "(ない場合は、このままで結構です。)" && $title eq "")) { $title = $url } if($memo eq "(こちらにメッセージをお願いします。)\n") { $memo = ""; } #$memo =~ s/\n/
\n/g; # メッセージの改行をbr要素に。 &cgi'SecureHtml( *memo ); if($method eq "submit") { &submit(); } # エラー用「現在のページ」 $cur = << "EOF"; Let's Write! > Oops! EOF #------------------------------------------------------------------------------ # 入力データのエラーチェック #------------------------------------------------------------------------------ # 名前と住所は必須。なければ警告。--------------------------------------------- if ($name eq "" || $place eq "" || $name eq "(あだ名でも結構です。 必ずお書き下さい。)" || $place eq "(簡単に、必ずお書き下さい。)") { $con = << "EOF";

お名前とお住まいは必ず入力してください。
お名前とお住まいを入力し直しておためし下さい。

Let's Write! (ご記帳ページ)へ戻る

EOF &cgi'Header; &oops($cur, $con); exit(0); } # E-Mailアドレスが入力されていて、かつ正しくないアドレスだった。--------------- unless ($address eq "" || &email_check($address) || $address eq "(お返事をお出ししますので、正確にお願いします。)") { $con = << "EOF";

E-mailアドレスが正しくありません。
正しいE-mailアドレスを入力し直しておためし下さい。

Let's Write! (ご記帳ページ)へ戻る

EOF &cgi'Header; &oops($cur, $con); exit(0); } # URLが入力されていて、かつネット上に存在しない場合 --------------------------- unless ($url eq "" || $url eq "(ない場合は、このままで結構です。)" || &check_url($url)) { $con = << "EOF";

記入されたURLが指すページは、 インターネット上に存在しないか、アクセスできません。
有効なページを指すURLを入力し直しておためし下さい。

Let's Write! (ご記帳ページ)へ戻る

EOF &cgi'Header; &oops($cur, $con); exit(0); if ($autoget eq "auto_ok") { $title = &get_title($url); } } #------------------------------------------------------------------------------ # 確認画面の表示 #------------------------------------------------------------------------------ $des = "Guest Bookの確認ページです。"; $cur = << "EOF"; Let's Write! > Write Confirmation EOF $tit = "Write Confirmation"; $hea = "Write Confirmation"; &cgi'Header; &head($des, $cur, $tit, $hea); print << "EOF";

あなたが書かれた内容の確認を致します。
誤り/修正個所がある場合には、前のページに戻って、再度入力をお願いいたします。

この段階では、まだご記帳は完了していません。
内容が正しい場合は、[確認して記帳完了]ボタンを押して下さい。

お名前:
$name
お住まい:
$place
E-Mail:
$address
E-Mailアドレスを
$add_comment
WebSite URL:
$url
WebSite URLを
$url_comment
WebSite Title:
$title
メッセージ
$memo
Image Icon:
Image Icon

EOF &foot(); exit(0); sub submit() { #------------------------------------------------------------------------------ # データファイルの作成 #------------------------------------------------------------------------------ # 日付を取得 ($sec,$min,$hour,$mday,$month,$year,$wday) = localtime; # 秒 分 時 日 月 年 曜日 $month++; @week = ("日","月","火","水","木","金","土"); $wday = $week[ $wday ]; @num =("0","1","2","3","4","5","6","7","8","9"); if ( $month<=9 ) { $month = $num[$month]; } if ( $mday<=9 ) { $mday = $num[$mday]; } if ( $hour<=9 ) { $hour = $num[$hour]; } if ( $min<=9 ) { $min = $num[$min]; } if ( $sec<=9 ) { $sec = $num[$sec]; } $year += 1900; $date = "$year年$month月$mday日($wday) $hour時$min分$sec秒"; #ファイル読み込み(昔投稿ファイル避難) &cgi'lock( '.data.txt' ); open(DATA, $logfile); @lines = ; close(DATA); &cgi'unlock( '.data.txt' ); #ファイル上書き(新投稿) &cgi'lock( '.data.txt' ); open(FILE, ">$logfile") || print "Error!"; print FILE <<"EOF";
Image Icon Name: EOF # E-mail Address の公開について if ($address eq "" || $address eq "(お返事をお出ししますので、正確にお願いします。)") { print FILE "$name "; } else { if ($add eq "yes"){ print FILE "$name "; } else { print FILE "$name "; } } print FILE <<"EOF"; Address: $place WebSite: EOF # URL の公開について if ($url eq "" || $url eq "(ない場合は、このままで結構です。)") { print FILE "No Web Page
\n"; } else { if ($ok_u eq "yes"){ print FILE "$title
\n"; } else { print FILE "No Web Page
\n"; } } print FILE <<"EOF"; At: $date (JST)
感想、メッセージ:

$memo

EOF close(FILE); &cgi'unlock( '.data.txt' ); #ファイル追加(昔投稿) &cgi'lock( '.data.txt' ); open(IN,">>$logfile"); foreach $line (@lines) { print IN "$line"; } close(IN); &cgi'unlock( '.data.txt' ); #------------------------------------------------------------------------------ # ログファイルの作成 #------------------------------------------------------------------------------ &cgi'lock( '.data.txt' ); open(MYLOG, ">>$mylog"); print MYLOG "-----------------------------------------\n"; print MYLOG "DATE : $date\n"; print MYLOG "REMOTE HOST : $ENV{'REMOTE_HOST'}\n"; print MYLOG "REMOTE ADDR : $ENV{'REMOTE_ADDR'}\n"; print MYLOG "HTTP USER AGENT : $ENV{'HTTP_USER_AGENT'}\n"; print MYLOG "-----------------------------------------\n"; print MYLOG "名前: $name\n"; print MYLOG "お住まい: $place\n"; print MYLOG "メールアドレス: $address\n"; print MYLOG " を: $add_comment\n"; print MYLOG "ホームページ : $url\n"; print MYLOG "タイトル : $title\n"; print MYLOG " を: $url_comment\n"; print MYLOG "メッセージ : \n$memo\n"; close(MYLOG); &cgi'unlock( '.data.txt' ); #↑訪問者リストファイルに書き出す部分。 # URLがある場合は、タグを使ってリンクを張る。 #------------------------------------------------------------------------------ # ゲストブックに書き込みがあったことを自分にメールで知らせる #------------------------------------------------------------------------------ open(MAIL,"| $sendmail $myadd"); # open(MAIL, ">>mail.txt"); print MAIL &print_jis(<= 5 && $hour <= 9) { $greeting = "おはようございます"; } else { if ($hour >= 10 && $hour <=18) { $greeting = "こんにちは"; } else { $greeting = "こんばんは"; } } # メールを出す。 open(MAIL,"| $sendmail $address"); print MAIL &print_jis(<Let's Write! > Write Complete! EOF $tit = "Write Complete!"; $hea = "Write Complete!"; &cgi'Header; &head($des, $cur, $tit, $hea); print << "EOF";

ご記帳が完了しました。
ご記帳、ありがとうございました。

ご記帳されたところを閲覧します。

EOF &foot(); exit(0); } # ゲストブックの表示をする関数 sub show_guestbook { $des = "Guest Bookを表示するページです。"; $cur = << "EOF"; Guest Book EOF $tit = "Guest Book"; $hea = "Guest Book"; &cgi'Header; &head($des, $cur, $tit, $hea); print << "EOF";

今までにみなさまに書いていただいた一覧です。

まだの方は、ぜひご記帳ください。

EOF &cgi'lock( '.data.txt' ); open(DATA,"$logfile"); while() { print; } close(DATA); &cgi'unlock( '.data.txt' ); &foot(); } # URLがアクセスできるかどうかを見る関数 sub check_url { my ($url) = shift; my $ua = new LWP::UserAgent; my $req = new HTTP::Request('HEAD', $url); my $res = $ua -> request($req); if ($res->is_success) { return(1); }else{ return(0); } } sub print_jis{ local($value) = @_; &jcode'convert(*value, 'jis'); $value; } sub title_autoget { my( $url_title ) = shift; return Jcode->new(&get_title( $url_title )) -> euc; } sub email_check { my ( $add ) = shift; Email::Valid->address( -address => $add, -mxcheck => 1 ) ? return(1) : return(0); }