#!/usr/local/bin/perl #↑あなたのブロバイダのCGIパスを記述してください。 #==================================================================# # Anthologys v2.5e # # Script by YASUU!! 2005/3/13 # # Ver.Mobile Arrange by ZERO 2007/10/7 # #==================================================================# #======================あなたが設定する項目========================# #このCGI ScriptのURL指定(通常はこのまま) $reload = './mobile.cgi'; #HomepageのURL指定(相対パス・絶対パス http://〜 のどちらでも良い) $home = ''; #CGIのタイトル $title = 'Anthologys 詩歌集'; #----------------最初に表示されるページの設定-----------------# #TOPpage 1pageに表示する記事数一覧のリスト数設定 $list = '10'; #NEW,UPの表示期間 (日) ( 0 を指定すると表示しなくなる) $n_view = '3'; #TOPの一覧に感想ページへのリンクを貼る場合は 1 を入れる $review = '1'; #新規投稿を禁止する場合は 1 を入れる $rom = ''; #----------------作品・感想閲覧ページの設定-----------------# #閲覧時の作品分割設定 (数字=1pageに表示するbyte数[標準は10KB] 空白=分割機能OFF) $list3 = '10240'; #ホスト表示 (1=ID化する 2=ID化しない 空白=表示しない) $hos = ''; #閲覧数カウント (1=IP解析をする 2=IP解析しない 空白=表示しない) $cnts = '1'; #カウント数のログを保存するディレクトリ $cntdir = './cnt/'; #作品閲覧時に作品のバイト数を表示しない場合は 1 を削除 $byte = '1'; #1pageに表示する感想記事数一覧のリスト数設定 $list2 = '5'; #----------------その他の重要な設定-----------------# #ページを左揃えにする場合はleft,中央ぞろえにする場合はcenterに $align = 'left'; #作品修正時に、記事を最上欄に上げるかどうかの設定 (1=上げる 空白=そのまま) $sel = '1'; #作品の作者からの感想投稿を制限する場合は 1 を入れる $iplim = ''; #同じ人の感想の連続投稿を制限する場合は 1 を入れる $iplim2 = ''; #海外の自動投稿プログラム対策 (1=拒否する 空白=チェックしない) $frlim = '1'; #投稿時に前書きを入力させない場合は 1 を削除 (他CGI併用時で前書き機能ONの時以外は通常無効) $sakutit = '1'; #管理者passwordの設定 $pass = 'abc123'; #最大記録保持数設定 この件数に達すると、ログのbackupを作成します(backupを設定した場合) $max = '100'; #感想ログ最大記録数設定 $max2 = '100'; #作品の連続投稿の禁止期間 (左から順に'日','時','分','秒'。標準は5分) $wait = '00'.'00'.'05'.'00'; #作品削除ログを保存するディレクトリ(モバイルからは閲覧不可) $del_dir = './del/'; #削除ログ最大記録数設定 $del_max = '100'; #トリップ機能を使用する場合は 1 を入れる $trips = '1'; #禁止タグ設定( , で区切って追加) @tag = ("table","meta","!--","form","embed","script","frame"); #------------------------sendmailの設定-----------------------------# $mailsend = ''; #mailを受け取る場合は 1 を入れる $mailto = ''; #管理人のメールアドレス $sendmail = '/usr/sbin/sendmail'; #sendmailのパス プロバイダに確認すること $webmaster = ''; #管理人の名前 #---------------ログの消失を防ぐためロックを設定する--------------# $lockdir = './lock/'; #ロックファイルを生成するディレクトリ(パーミッション777) $lock = '1'; #ロック方法(1=symlink方式,2=open式,0=設定なし) #-------------------------感想記事の設定----------------------------# $resdir = './res/'; #感想記事を保存するディレクトリ $point = '1'; #採点機能設定(1=点数固定式,2=点数入力式,空白=採点なし) $poiview = ''; #感想記事で、採点された点数を表示する場合は 1 を入れる $ep = '10'; #固定点設定 ※1を選択した場合 $maxp = '100'; #最高点設定 ※2を選択した場合 $minp = '0'; #最低点設定 ※2を選択した場合 #-------イタズラ対策---# $kyohi = ''; #する場合は 1 を入れる #--入室を拒否するIPまたはブロバイダ名を '127.0.0.1', というように''内に記述---# @kyohi = ( 'proxy', '', '', '', ''); #------------------------ログの設定-------------------------------# $backup = '1'; #バックアップをしない場合は1を削除 $backname = '作品集'; #backupファイルへのリンク見出し #ログ、バックアップログを保存するディレクトリ(Anthology.cgiと同じディレクトリ内 同じディレクトリに設置できない場合は../log/というようにcgi-bin横に設定 パーミッション777 $dir = './log/'; #------表示するメッセージなどの設定<タグも使えます>------# #一覧のタイトルの下に表示するメッセージ sub mes{ print <ホーム
HTML #ここは新規投稿を打ち切る場合に必要な処理です if ($FORM{'log'} eq "" && $rom eq "") { if ($cnt <= $max) { print "■投稿
\n"; } } } #著作権表示(※削除や見えにくくするなどの改変行為は禁止します) sub tyo{ print < Anthologys v2.5e Script by YASUU!!
Ver.Mobile Arrange by ZERO HTML } #============================ここまで===============================# #=以下のファイルはこの掲示板のScriptと同じディレクトリに設置========# require './jcode.pl'; if ($kyohi eq '1') { &kyohi; } if ($ENV{'REQUEST_METHOD'} eq "POST") { $post=1; read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $post=0; $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach (@pairs) { ($name, $value) = split(/=/, $_); $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/"/"/g; if ($name eq "come") { $value =~ s/
/\r/g; } if ($name ne "value") { $value =~ s//>/g; } else { foreach (@tag){ if ($value =~ /<$_(.|\n)*>/i) { &error("使用禁止タグが記述されています。"); } } } if ($value =~ /\,/i) { &error("半角コンマ「,」は使用できません。全角コンマ「,」に置き換えてください。"); } $value =~ s/\0//g; $value =~ s/\r\n/
/g; $value =~ s/\r/
/g; $value =~ s/\n/
/g; if ($name eq 'target') { push(@CK,$value); } else { $FORM{$name} = $value; } } if ($FORM{'log'} eq '') { $file = "$dir" . 'anthology.txt'; } else { $file = "$dir" . "$FORM{'log'}" . '.txt'; if (!-e $file) { &error("指定されたログは存在しません。"); } } &link; #=========ボタンもしくはアンカーをクリックしたときの処理の流れを制御=====# if ($FORM{'action'} eq 'form') { &form; } elsif ($FORM{'action'} eq 'dele') { &dele; } elsif ($FORM{'action'} eq 'dele3') { &dele3; } elsif ($FORM{'action'} eq 'regist') { ®ist; } elsif ($FORM{'action'} eq 'regist2') { ®ist2; } elsif ($FORM{'action'} eq 'html2') { &html2; } elsif ($FORM{'action'} eq 'html3') { &html3; } elsif ($FORM{'action'} eq 'in') { ∈ } elsif ($FORM{'action'} eq 'admin') { &admin; } elsif ($FORM{'action'} eq 'review') { &review; } elsif ($FORM{'action'} eq 'review_k') { &review_k; } elsif ($FORM{'action'} eq 'admin2') { &admin2; } &html; sub top { #HTMLヘッダ if ($headflag) { return: } print "Content-type: text/html; charset=Shift_JIS\n\n"; print "\n"; print "\n"; $headflag = 1; } sub html { #トップページ local($count); &file; &date; ⊤ print "$title\n"; print "\n"; print "\n"; print "
\n"; print "$title\n"; print "
\n"; &mes; if ($backup eq '1') { &dir; } print "
\n"; if ($FORM{'log'} eq '') { print "[現在 $cnt 作品]
\n"; } else { print "[合計 $cnt 作品]
\n"; } if (@lines ne 0) { if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; } $end_data = @lines - 1; $page_end = $page + ($list - 1); if ($page_end >= $end_data) { $page_end = $end_data; } foreach ($page .. $page_end) { ($date,$num,$b_num,$pwd,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$host,$re,$mgki,$count,$rescnt,$points) = split(/\,/,$lines[$_]); chop($points); &newup; print "\n"; print "$tit\n"; print "作:$name\n"; if ($review) { $files = $resdir . $num . '.txt'; $rescnt = 0; if (-e $files) { open(MD,"$files"); @blines = ; $rescnt = @blines; close(MD); } if ($rescnt) { print "【$rescnt】\n"; } } print "
\n"; } &list; } else{ print "【作品が投稿されていません】
\n"; } print "
\n"; &tyo; &foot; exit; } sub html2 { #1件の作品のみ表示するView local($lencnt)=0; ⊤ &file2; if ($cnts) { &count2; } if ($sakutit eq "1") { if ($mgki eq "") { print "$tit\n";} else { print "$mgki\n";} print "\n"; } else { print "$tit\n"; print "\n"; } if ($FORM{'page3'} eq '') { $page3 = 1; } else { $page3 = $FORM{'page3'}; } $tit =~ s/\0/\,/g; $value =~ s/\0/\,/g; if ($value !~ /
/) { $value =~ s/\r/
/g; } if ($list3 && length($value) > $list3) { &partition; } $come =~ s/\0/\,/g; $come =~ s/\r/
/g; $come =~ s/(http:[!#-9A-~]+)/$1<\/a><\/b>/g; print "\n"; print "
\n"; print "$tit
\n"; print "
\n"; print "$value\n"; print "
\n"; if ($lencnt) { &list3; } if (!$lencnt || $lencnt == $page3) { print "作者:\n"; if ($mail ne "") { print "$name [$mail]\n"; } else { print "$name\n"; } print "
\n"; if ($url ne "") { print "URL:
http://$url
\n"; } if ($cnts) { $count = &count3; print "閲覧数:$count
\n"; } if ($byte) { $vlen = $value; $vlen =~ s/<[^>]*(>|$)//g; $len = length($vlen); print "BYTE数:$len
\n"; } print "$date公開
\n"; print "
\n"; print "■作者からのメッセージ
\n"; if ($come ne "") { print "$come\n"; } else { print "作者からのメッセージはありません。\n"; } print "
\n"; } print "■一覧に戻る
"; print "■感想を見る・書く
\n"; print "■削除・編集
\n"; &foot; exit; } sub regist { #記事書き込み if (!$post) { &error("不正アクセスです。"); } if ($frlim) { &access($FORM{'value'},$FORM{'access'},10); } if ($trips) { $names = &trip($FORM{'name'}); } else { $names = $FORM{'name'}; } $FORM{'url'} =~ s/http\:\/\///g; $host = $ENV{'REMOTE_ADDR'}; &date; &encopass($FORM{'pwd'}); &lock; if (!open(FD,"$file")) { &error("ファイル読込みに失敗しました。"); } @lines = ; close(FD); if ($FORM{'edit'} ne '') { $retry = 0; foreach (@lines) { ($date,$num,$b_num,$pwds,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$hosts,$re,$mgki) = split(/\,/,$_); chop($mgki); if ($FORM{'num'} eq $num) { if ($FORM{'edit'} ne $pass && crypt($FORM{'edit'},substr($pwds,$salt,2)) ne $pwds) { &error("PASSWORDが一致しません。"); } $retry = 1; if ($FORM{'check'}) { $_ = "$date_now\,$line_num\,$bass_num\,$encpwd\,$FORM{'tit'}\,$names\,$FORM{'mail'}\,$FORM{'url'}\,$FORM{'value'}\,$FORM{'come'}\,$FORM{'fcol'}\,$FORM{'img'}\,$host\,$retry\,$FORM{'mgki'}\n"; } else { $_ = "$date\,$num\,$b_num\,$encpwd\,$FORM{'tit'}\,$names\,$FORM{'mail'}\,$FORM{'url'}\,$FORM{'value'}\,$FORM{'come'}\,$FORM{'fcol'}\,$FORM{'img'}\,$host\,$retry\,$FORM{'mgki'}\n"; } } push(@new,$_); } if (!$retry) { &error("該当記事が見当たりません。"); } } else { if ($FORM{'log'} ne "") { &error("この作品集への新規投稿は締め切っています。"); } $i = 0; foreach (@lines) { ($date,$num,$b_num,$pwds,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$hosts,$re,$mgki) = split(/\,/,$_); chop($mgki); if ($host eq $hosts) { if ($value eq $FORM{'value'}) { &error("二重投稿です。同じ内容がすでに登録されています。"); } if ($wait > $line_num - $num) { &error("前回の投稿からあまり時間が経っていません。もう少し待ってください。"); } } $i++; if ($i == $max) { if ($backup eq '1') { &backfile; } else { last; } } if (!$skip) { push(@new,$_); } } $retry = 0; $value = "$date_now\,$line_num\,$bass_num\,$encpwd\,$FORM{'tit'}\,$names\,$FORM{'mail'}\,$FORM{'url'}\,$FORM{'value'}\,$FORM{'come'}\,$FORM{'fcol'}\,$FORM{'img'}\,$host\,$retry\,$FORM{'mgki'}\n"; unshift(@new,$value); } if (!open(FD,">$file")) { &error("ファイル読込みに失敗しました。"); } print FD @new; close(FD); if ($cnts) { &count; } if ($FORM{'check'}) { $rfile = "$resdir" . "$FORM{'num'}" . '.txt'; $new_rfile = "$resdir" . "$line_num" . '.txt'; rename $rfile => $new_rfile; } &unlock; &mail; ⊤ print "投稿完了\n"; print "投稿が完了しました。\n"; print "戻る\n"; &foot; exit; } sub regist2 { #感想記事書き込み if (!$post) { &error("不正アクセスです。"); } if ($FORM{'name_r'} eq "" || $FORM{'come_r'} eq "") { &error("名前か内容が記入されていません。"); } if ($FORM{'mail_r'} && $FORM{'mail_r'} !~ /(.*)\@(.*)\.(.*)/) { &error("E-MAILの形式が間違っています。正しく登録してください。"); } if (length $FORM{'pwd2'} > 8 || $FORM{'pwd2'} eq "" || $FORM{'pwd2'} =~ /\W/) { &error("投稿者用PASSWORDを半角英数8文字で登録してください。"); } if ($point eq "1") { if ($FORM{'point'} ne $ep) { &error("点数の設定が不正です。"); } } elsif ($point eq "2") { if ($FORM{'point'} > $maxp || $FORM{'point'} < $minp || $FORM{'point'} eq "" || $FORM{'point'} =~ /\D/ ) { &error("$minp点から$maxp点の間で点数をつけてください。"); } } if ($frlim) { &access($FORM{'come_r'},$FORM{'access'},4); } $FORM{'url_r'} =~ s/http\:\/\///g; $host = $ENV{'REMOTE_ADDR'}; if ($iplim && crypt ($host," ") eq $FORM{'lim'}) { &error("作者は感想を投稿できません。読者からの感想を待ちましょう。"); } &date; &encopass($FORM{'pwd2'}); &lock; $file2 = "$resdir" . $FORM{'res'} . '.txt'; if (!-e $file2) { if (!open(FD,">$file2")) { &error("ファイル読込みに失敗しました。"); } @lines = ; close(FD); chmod (0666,"$file2"); } else { if (!open(FD,"$file2")) { &error("ファイル読込みに失敗しました。"); } @lines = ; close(FD); } #記事保持件数処理 $i = 0; foreach (@lines) { ($date,$renum,$name,$mail,$url,$come,$poi,$hosts,$pwds2) = split(/\,/,$_); chop($pwds2); if ($host eq $hosts) { if ($iplim2) { &error("感想の投稿は1度までです。"); } if ($FORM{'name_r'} eq $name && $FORM{'come_r'} eq $come) { &error("二重投稿です。同じ内容がすでに投稿されています。"); } } $i++; if ($i == $max2) { last; } push(@new,$_); } $value = "$date_now2\,$line_num\,$FORM{'name_r'}\,$FORM{'mail_r'}\,$FORM{'url_r'}\,$FORM{'come_r'}\,$FORM{'point'}\,$host\,$encpwd\n"; unshift(@new,$value); if (!open(FD,">$file2")) { &error("ファイル読込みに失敗しました。"); } print FD @new; close(FD); &unlock; ⊤ print "投稿完了\n"; print "投稿が完了しました。\n"; print "戻る\n"; &foot; exit; } sub form { #作品投稿フォーム local($checkflag); if ($in_flag) { if (!open(FD,"$file")) { &error("ファイル読込みに失敗しました。"); } @lines = ; close(FD); if ($FORM{'pwd'} eq $pass) { $admin = 1; } foreach (@lines) { ($date,$num,$b_num,$pwd,$tit,$name,$mail,$url,$val,$come,$fcol,$imgs,$host,$re,$mgki) = split(/\,/,$_); chop($mgki); if ($FORM{'num'} eq $num) { if ($admin || crypt($FORM{'pwd'},substr($pwd,$salt,2)) eq $pwd) { $checkflag=1; last; } else { &error("PASSWORDが一致しません。"); } } } if (!$checkflag) { &error("該当作品が見つかりません。"); } $f_tit = "$titの編集"; } else { if ($FORM{'log'} ne "") { &error("この作品集への新規投稿は締め切っています。"); } $f_tit = "新規作品投稿"; } if ($rom eq '1' && !$check_flag && $FORM{'pwd'} ne $pass) { &admin; } $tit =~ s/\0/\,/g; $val =~ s/\0/\,/g; $val =~ s/
/\r/g; $come =~ s/\0/\,/g; $come =~ s/
/\r/g; ⊤ print "$f_tit\n"; print "\n"; print "\n"; print "
\n"; print "
\n"; print "\n"; print "\n"; print "小説投稿
\n"; print "お名前
\n"; if ($checkflag) { print "\n"; } else { print "\n"; } print "
\n"; print "Mail
\n"; if ($checkflag) { print "\n"; } else { print "\n"; } print "
\n"; print "URL
\n"; if ($checkflag) { print "\n"; } else { print "\n"; } print "
\n"; print "TITLE
\n"; print "\n"; if ($sakutit) { print "
\n"; print "前書き
\n"; print "\n"; } print "
\n"; print "作品内容
\n"; print "\n"; print "
\n"; print "コメント
\n"; print "\n"; if ($checkflag && $sel) { print "\n"; } if ($FORM{'log'} ne '') { $reload = "$reload?log=$FORM{'log'}"; } print "
\n"; print "PASSWORD
\n"; print "\n"; if ($checkflag) { print "\n"; print "\n"; print "\n"; print "\n"; } print "\n"; print "\n"; print "
\n"; &foot; exit; } sub html3 { #作品投稿の確認画面 local($lencnt)=0; local($html3_flag)=0; if (!$post) { &error("不正アクセスです。"); } if ($FORM{'name'} eq "" || $FORM{'value'} eq "") { &error("名前か内容が記入されていません。"); } if (length $FORM{'pwd'} > 8 || $FORM{'pwd'} eq "" || $FORM{'pwd'} =~ /\W/) { &error("投稿者用PASSWORDを半角英数8文字で登録してください。"); } if ($FORM{'mail'} && $FORM{'mail'} !~ /(.*)\@(.*)\.(.*)/) { &error("E-MAILの形式が間違っています。正しく登録してください。"); } if ($FORM{'tit'} eq "") { $FORM{'tit'} = '無題'; } if ($frlim) { &access($FORM{'value'},$FORM{'access'},10); } if ($trips) { $names = &trip($FORM{'name'}); } else { $names = $FORM{'name'}; } $FORM{'url'} =~ s/http\:\/\///g; $value = $FORM{'value'}; if ($FORM{'page3'} eq '') { $page3 = 1; } else { $page3 = $FORM{'page3'}; } if ($list3 && length($FORM{'value'}) > $list3) { $html3_flag=1; &partition; } if ($FORM{'img'}) { $img = $FORM{'img'}; } ⊤ print "$FORM{'tit'} はこのイメージで表\示されます\n"; print "\n"; print "\n"; print "
\n"; print "※あなたの投稿作品はこのイメージで表\示されます

\n"; print "$FORM{'tit'}
\n"; print "
\n"; print "$value\n"; if (!$lencnt || $lencnt == $page3) { print "
\n"; print "作者:\n"; if ($FORM{'mail'} ne "") { print "$names\n"; } else { print "$names\n"; } print "
\n"; if ($FORM{'url'} ne "") { print "URL:http://$FORM{'url'}
\n"; } if ($cnts) { print "閲覧数:***
\n"; } if ($byte) { $vlen = $value; $vlen =~ s/<[^>]*(>|$)//g; $len = length($vlen); print "BYTE数:$len
\n"; } print "****年**月**日(week) **時**分**秒 公開\n"; print "
\n"; print "■作者からのメッセージ
\n"; if ($FORM{'come'} ne "") { print "$FORM{'come'}\n"; } else { print "作者からのメッセージはありません。\n"; } } print <間違いがなければOKボタンをクリックしてください。
投稿後もPASSWORD [ $FORM{'pwd'} ] を使って編集、削除が可\能\です。
HTML &foot; exit; } sub error { #エラー処理 if ($lockon) { &unlock; } print "Content-type: text/html\n\n"; print "エラーです\n"; print "\n"; print "
\n"; print "ERROR!!
\n"; print "$_[0]\n"; &foot; exit; } sub dele { #作品記事削除 local($del,$del2); if (!$post || !$in_flag) { &error("不正アクセスです。"); } if (!@CK) { &error("削除する記事にチェックが入っていません。"); } &lock; if (!open(FD,"$file")) { &error("ファイル読込みに失敗しました。"); } @lines = ; close(FD); if ($FORM{'pwd'} eq $pass) { $admin = 1; } foreach (@lines) { ($date,$num,$b_num,$pwd,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$host,$re,$mgki) = split(/\,/,$_); $del = 0; foreach (@CK) { if ($_ eq $num) { $del = 1; $del2 = 1; if (!$admin && crypt($FORM{'pwd'},substr($pwd,$salt,2)) ne $pwd) { &error("PASSWORDが一致しません。"); } $ressfile = $resdir . $_ . '.txt'; unlink($ressfile); if ($cnts) { &count4; } &del_log; } } if(!$del) { push(@new,$_); } } if (!$del2) { &error("該当記事が見当たりません。"); } if (!open(FD,">$file")) { &error("ファイル読込みに失敗しました。"); } print FD @new; close(FD); &unlock; ⊤ print "削除完了\n"; print "削除が完了しました。\n"; print "一覧へ\n"; &foot; exit; } sub dele3 { #感想記事削除 local($del) = 0; if (!$post) { &error("不正アクセスです。"); } &lock; if ($FORM{'pwd2'} eq $pass) { $admin = 1; } $file2 = "$resdir" . "$FORM{'key'}" . '.txt'; if (!open(FD,"$file2")) { &error("ファイル読込みに失敗しました。"); } @lines = ; close(FD); foreach (@lines) { ($date_r,$renum,$num_r,$name_r,$mail_r,$url_r,$come_r,$host_r,$pwd2) = split(/\,/,$_); chop($pwd2); if ($FORM{'gai'} eq $renum) { $del = 1; if ($admin) { next; } if ($pwd2 ne "" && crypt($FORM{'pwd2'},substr($pwd2,0,2)) eq $pwd2) { next; } &error("PASSWORDが一致しません。"); } push(@new,$_); } if (!$del) { &error("該当記事が見当たりません。"); } if (!open(FD,">$file2")) { &error("ファイル読込みに失敗しました。"); } print FD @new; close(FD); &unlock; ⊤ print "削除完了\n"; print "削除が完了しました。\n"; print "戻る\n"; &foot; exit; } sub review { #感想記事閲覧 &file2; ⊤ print "$titの感想\n"; print "\n"; print "\n"; print "
\n"; print "$tit の感想\n"; print "
\n"; print "■感想を書く\n"; print "
\n"; $file2 = $resdir . $FORM{'key'} . '.txt'; if (-e $file2) { open(MD,"$file2"); @blines = ; $rescnt = @blines; close(MD); if ($point ne "") { foreach (@blines) { ($a1,$a2,$a3,$a4,$a5,$a6,$poi2) = split(/\,/,$_); $points += $poi2; } } if ($FORM{'page2'} eq '') { $page2 = 0; } else { $page2 = $FORM{'page2'}; } $end_data2 = @blines - 1; $page_end2 = $page2 + ($list2 - 1); if ($page_end2 >= $end_data2) { $page_end2 = $end_data2; } if ($rescnt != 0) { $no = $rescnt - $page2; foreach ($page2 .. $page_end2) { ($date_r,$renum,$name_r,$mail_r,$url_r,$come_r,$poi,$host_r,$pwd2) = split(/\,/,$blines[$_]); $come_r =~ s/\0/\,/g; $come_r =~ s/\r/
/g; $come_r =~ s/(http:[!#-9A-~]+)/$1<\/a><\/b>/g; print "No.$no\n"; print "
\n"; if ($mail_r ne "") { print "
$name_r\n"; } else { print "$name_r\n"; } if ($url_r ne "") { print " [URL]\n"; } print "
\n"; if ($point && $poiview) { print " $poi点\n"; print "
\n"; } print " $date_r\n"; print "
\n"; if ($hos ne "") { if ($hos eq "1") { $host_r = crypt ($host_r," "); } print "ID :$host_r
\n"; } print "$come_r\n"; print "
PASS\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "
\n"; print "
\n"; --$no; } } else { print "感想記事の投稿は現在ありません。\n"; } } else { print "感想記事の投稿は現在ありません。\n"; } if ($rescnt != 0) { &list2; print "総レス数 $rescnt\n"; if ($point ne "") { print " 合計 $points 点\n"; } } print "
■作品に戻る
\n"; print "■一覧に戻る
\n"; print "■削除・編集
\n"; &foot; exit; } sub review_k { #感想投稿 &file2; ⊤ print "$titの感想投稿\n"; print "\n"; print "\n"; print "
\n"; print < 感想投稿
お名前(必須)

E-Mail(任意)

HOME URL(任意)

メッセージ

HTML if ($point eq "1") { print "\n"; } elsif ($point eq "2") { print "評価(必須)\n"; print "
\n"; print "点\n"; print "
\n"; } print "削除用パス
\n"; print "\n"; print < HTML if ($iplim) { $chost = crypt ($host," "); print "\n"; } print "\n"; &foot; exit; } sub admin2 { #作品の管理画面 &file2; ⊤ print "$titの編集\n"; print "\n"; print "\n"; print "
\n"; print "$tit の編集\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 "
\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 "
\n"; print "
■作品に戻る
\n"; print "■一覧に戻る
\n"; print "■感想を見る・書く
\n"; &foot; exit; } sub backfile { #過去ログ生成 $backfilename = "$dir" . "$t_back" . '.txt'; if (!open(BD,">$backfilename")) { last; } print BD @lines; close(BD); @new = ''; $skip = 1; &del_log; } sub dir { #過去ログ表示 local($b_files,@dirfile); opendir(DIR,$dir); @dirfile = readdir(DIR); closedir DIR; if (@dirfile > 3) { print "
\n"; print "$backname\n"; if ($FORM{'log'} ne "") { print " 1\n"; } else { print " 1\n"; } $i = 1; foreach (@dirfile) { if ($_ =~ /.txt/ && $_ !~ /anthology.txt/) { $i++; $b_files = "$dir" . "$_"; if ($b_files ne '') { $_ =~ s/.txt//; if ($FORM{'log'} ne $_) { print " $i\n"; } else { print " $i\n"; } } } } } } sub encopass { #パスワード暗号化処理 local($p1) = @_; local(@saltset, $salt); @saltset = ('a'..'z', 'A'..'Z', '0'..'9', '.', '/'); srand; $salt = $saltset[int(rand(@saltset))] . $saltset[int(rand(@saltset))]; $encpwd = crypt($p1, $salt) || crypt ($p1, '$1$' . $salt); $encpwd; } sub in { #作品の編集・削除の分岐 local($in_flag) = 1; if (!$post) { &error("不正アクセスです。"); } if ($FORM{'type'} eq 'form') { $num = $FORM{'num'}; $pwd = $FORM{'pwd'}; $log = $FORM{'log'}; &form; } elsif ($FORM{'type'} eq 'dele') { push (@CK,$FORM{'num'}); $pwd = $FORM{'pwd'}; $log = $FORM{'log'}; &dele; } } sub lock { #ロック開始 local($lockfile) = $lockdir . 'listlock'; local($try) = 3; if (!$lock) { return; } if (-e $lockfile) { local($mtime) = (stat($lockfile))[9]; if ($mtime < time - 60) { &unlock; } } if ($lock eq '1') { while (!symlink(".", $lockfile)) { if (--$try <= 0) { &error("ビジー状態です。もう少し後に再度投稿してください。"); } sleep(2); } } elsif ($lock eq '2') { while(-f "$lockfile") { if (--$try <= 0) { &error("ビジー状態です。もう少し後に再度投稿してください。"); } sleep(1); } open(LOCK,">$lockfile"); close(LOCK); } $lockon = 1; } sub unlock { #ロック解除 local($lockfile) = $lockdir . 'listlock'; if (-e $lockfile) { unlink($lockfile); } $lockon = 0; } sub date { #現在日時取得 ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday) = localtime(time); @week = ("日","月","火","水","木","金","土"); $date_now = sprintf("%04d年%02d月%02d日(%s) %02d時%02d分%02d秒", $year+1900,$mon+1,$mday,$week[$wday],$hour,$min,$sec); $date_now2 = sprintf("%04d-%02d-%02d %02d:%02d", $year+1900,$mon+1,$mday,$hour,$min); $line_num = sprintf("%04d%02d%02d%02d%02d%02d", $year+1900,$mon+1,$mday,$hour,$min,$sec); $bass_num = sprintf("Unused_BASS_No"); $t_back = sprintf("%04d%02d%02d%02d", $year+1900,$mon+1,$mday,$hour); } sub kyohi { #拒否ユーザの表示ページ $host = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; if ($host eq $addr) { $host = gethostbyaddr(pack("C4",split(/\./,$host)),2) || $addr; } if ($host eq '') { $host = $addr; } foreach (@kyohi) { if (/^$/) { next; } if ($host =~ /$_/i || $addr =~ /$_/i) { &error("アクセス許可がありません。"); } } } sub link { #リンク先の条件分岐 $link = "$reload?log=$FORM{'log'}"; $link2 = "$link&key=$FORM{'key'}&page=$FORM{'page'}"; $link3 = "$link2&page3=$FORM{'page3'}"; } sub file { #作品ログ読み込み処理 if (!-e $file) { if (!open(FD,">$file")) { &error("$dirが設定されていないか、パーミッションが書込みOKに設定されていません。"); } @lines = ; close(FD); chmod (0666,"$file"); } else { if (!open(FD,"$file")) { &error("ファイル読込みに失敗しました。"); } @lines = ; close(FD); } $cnt = @lines; @lines = sort { $b cmp $a } @lines; } sub file2 { #作品閲覧時の作品ログ読み込み処理 local($find)=0; if (!open(FD,"$file")) { &error("ファイル読込みに失敗しました。"); } while () { ($date,$num,$b_num,$pwd,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$host,$re,$mgki) = split(/\,/,$_); chop($mgki); if($num == $FORM{'key'}) { $find=1; last; } } close(FD); if (!$find) { &error("指定した作品が見つかりません。"); } } sub newup { #NEW,UPの表示 if ($n_view && $n_view*1000000 >= $line_num - $num) { if ($re eq '1') { print "UP!!\n"; } else { print "NEW!!\n"; } } } sub list { #一覧の改page処理(作品リスト) local($pag,$no,$start,$final); $pag = 0; $no = 1; $start = $page + 1; $final = $page + $list; if (@lines > $list) { print "PAGE\n"; while ($pag < @lines ) { if ($page ne $pag) { print "[$no]\n"; } else { print "[$no]\n"; } $pag = $pag + $list; $no++; } if ($final >= $cnt) { print "作品はここまでです。\n"; $final = $cnt; } print " ( $start - $final / $cnt )\n"; } } sub list2 { #感想記事の改page処理(感想リスト) local($pag,$no,$start,$final,$rlink); $pag = 0; $no = 1; $start = $page2 + 1; $final = $page2 + $list2; if ($FORM{'action'} eq 'review') { $rlink = "$link3&action=review"; } else { $rlink = "$link3&action=sentaku2&pwd=$FORM{'pwd'}"; } if (@blines > $list2) { print "PAGE\n"; while ($pag < @blines ){ if($page2 ne $pag) { print "[$no]\n"; } else { print "[$no]\n"; } $pag = $pag + $list2; $no++; } if ($final >= $rescnt) { $final = $rescnt; } print " ( $start - $final / $rescnt )\n"; print "
\n"; } } sub list3 { #作品内容の分割時の改page処理 local($no) = 1; print "PAGE\n"; while ($no <= $lencnt ) { if($page3 ne $no) { print "[$no]\n"; } else { print "[$no]\n"; } $no++; } print "
\n"; } sub partition { #作品内容の分割処理 local(@values,@tval,$i,$j,$tlen,$t); @values = split(/
/,$value); @tval=(); $i=0; $j=0; $tlen=0; while ($j < @values) { $tval[$i] .= "$values[$j]
"; $values[$j] =~ s/<[^>]*(>|$)//g; $tlen += length($values[$j]); $j++; if ($tlen >= $list3) { $i++; $tlen=0; } } if (!$i == 0) { $lencnt = $i + 1; $t = $tval[$page3 - 1]; $pag3 = $page3 + 1; if ($page3 < $lencnt) { if (!$html3_flag) { $t .= "
⇒To Be Continued..."; } else { $t .= "
"; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= ""; $t .= " \" class=d1>
"; } } $value = $t; $tit .= " 【PAGE $page3/$lencnt】"; } } sub count { #カウントファイル生成 local($cfile,$data,$ct); if ($FORM{'num'} ne '') { $cfile = "$cntdir" . "$FORM{'num'}" . '.txt'; $new_cfile = "$cntdir" . "$line_num" . '.txt'; rename $cfile => $new_cfile; } else { $cfile = "$cntdir" . "$line_num" . '.txt'; open(NO,">$cfile"); print NO "0:"; close(NO); } } sub count2 { #カウント数書き込み local($cfile2,$data,$ct,$ip,$addr); $cfile2 = "$cntdir" . "$num" . '.txt'; $addr = $ENV{'REMOTE_ADDR'}; open(IN,"$cfile2"); $data = ; close(IN); ($ct,$ip) = split(/:/, $data); $ct++; if ($cnts eq "2" || $addr ne $ip) { open(OUT,">$cfile2"); print OUT "$ct\:$addr"; close(OUT); } } sub count3 { #カウント数読み込み local($cfile3,$ct,$data); $cfile3 = "$cntdir" . "$num" . '.txt'; if (-e $cfile3) { open(NO,"$cfile3"); $data = ; close(NO); ($ct) = split(/:/, $data); } else { $ct = 0; } $ct; } sub count4 { #カウントファイル削除 local($cfile4); $cfile4 = "$cntdir" . "$num" . '.txt'; unlink($cfile4); } sub del_log { #削除ログ書き込み local($dfile,$del_cnt,$del_line,@del_lines); if ($FORM{'log'} eq "") { $dfile = "$del_dir" . 'del_' . 'anthology' . '.txt'; } else { $dfile = "$del_dir" . 'del_' . "$FORM{'log'}" . '.txt'; } open(FD,"$dfile"); @del_lines = ; $del_cnt = @del_lines; close(FD); &date; if (!$skip) { if ($del_cnt >= $del_max) { pop(@del_lines); } if ($admin) { $del_line .= "$date_now:『$tit』:$name:<<管理者削除>>\n"; } else { $del_line .= "$date_now:『$tit』:$name\n"; } unshift(@del_lines,$del_line); } else { unlink($dfile); $dfile = "$del_dir" . 'del_' . "$t_back" . '.txt'; } open(FD,">$dfile"); print FD @del_lines; close(FD); } sub mail { #メール送信処理 if ($mailsend ne "1" || $mailto eq $FORM{'mail'}) { return; } local($subject) = "[$title] 新着情報"; local($subject2) = "[$title] 投稿ありがとうございました"; local($subj) = "$FORM{'tit'}"; local($subj2) = "$FORM{'mgki'}"; local($name) = "$FORM{'name'}"; local($email) = "$FORM{'mail'}"; local($url) = "$FORM{'url'}"; local($ps) = "$FORM{'pwd'}"; local($reloads) = "$reload?action=html2&key=$line_num"; local($reloades) = "$reload?action=html2&key=$num"; &jcode'convert(*subject,'jis'); &jcode'convert(*subject2,'jis'); &jcode'convert(*subj,'jis'); &jcode'convert(*subj2,'jis'); &jcode'convert(*name,'jis'); &jcode'convert(*email,'jis'); &jcode'convert(*url,'jis'); &jcode'convert(*ps,'jis'); if (open(OUT,"| $sendmail $mailto")) { print OUT "To: $mailto\n"; print OUT "From: $email\n"; print OUT "Subject: $subject\n"; print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT "Content-Type: text/plain\n"; print OUT "\n\n"; if ($retry eq '1') { print OUT "$name" . "さんより以下の作品の修正投稿がありました\n"; } else { print OUT "$name" . "さんより以下の作品の投稿がありました\n"; } print OUT "TITLE:$subj\n"; print OUT "前書き:$subj2\n"; if ($email ne "") { print OUT "mailto:$email\n"; } else { print OUT "E-Mailの登録はありません。\n"; } if ($url ne "") { print OUT "homepage:http://$url\n"; } else { print OUT "URLの登録はありません。\n"; } if ($retry eq '1') { print OUT "$reloades\n"; } else { print OUT "$reloads\n"; } close(OUT); } if ($email ne '') { if (open(OUT,"| $email")) { print OUT "To: $email\n"; print OUT "From: $mailto\n"; print OUT "Subject: $subject2\n"; print OUT "Content-Transfer-Encoding: 7bit\n"; print OUT "Content-Type: text/plain\n"; print OUT "\n\n"; if ($retry eq '1') { print OUT "$name" . "さんが修正投稿した作品\n"; } else { print OUT "$name" . "さんが投稿した作品\n"; } print OUT "TITLE:$subj\n"; print OUT "前書き:$subj2\n"; if ($url ne "") { print OUT "homepage:http://$url\n"; } else { print OUT "URLの登録はありません。\n"; } print OUT "編集削除用PASSWORD [ $ps ]\n"; print OUT "$name" . "さんの作品は以下のURLで確認できます。\n"; if ($retry eq '1') { print OUT "$reloades\n"; } else { print OUT "$reloads\n"; } print OUT "\n\n"; print OUT "またの投稿をお待ちしています。\n"; print OUT "$webmaster\n"; print OUT "mailto:$mailto\n"; close(OUT); } } } sub foot { #HTMLフッタ print "\n"; } sub access { #海外ボット対策 local(@axs) = @_; local(@urls); if ($axs[0] !~ /[\x80-\xff]/) { &error("投稿は日本語でお願いします。"); } if ($axs[1] ne "あ") { &error("海外ブラウザからの投稿はお断りです。"); } @urls = ($axs[0] =~ m|https?://|ig); if ($#urls + 1 >= $axs[2]) { &error("内容に記述されたURLが多すぎます。"); } } sub trip { #トリップ処理(KENTさん[http://www.kent-web.com/]のトリップ機能を引用) local($name) = @_; $name =~ s/◆/◇/g; if ($name =~ /#/) { local($handle,$trip) = split(/#/, $name, 2); local($enc) = crypt($trip, ' ') || crypt ($trip, '$1$' . ' '); $enc =~ s/^..//; return "$handle◆$enc"; } else { return $name; } } #Script_END