#!/usr/local/bin/perl #↑あなたのブロバイダのCGIパスを記述してください。 #==================================================================# # Anthologys v2.5e # # Script by YASUU!! 2005/11/20 # # Ver.Frame Arrange by ZERO 2007/5/12 # #==================================================================# #======================あなたが設定する項目========================# $body = '
'; #最初に表示されるページの設定 $reload = './frame.cgi'; #このCGI ScriptのURL指定 $home = ''; #HomepageのURL指定 $title = 'Anthologys 詩歌集'; #CGIのタイトル $title_img = ''; #タイトルにイメージを使用する場合、画像のURLを指定 $title_col = ''; #一覧でのタイトル表示定義 $title_col2 = ''; #感想ページでの題名表示定義 $col = '#000000'; #一覧の文字の一部の色 $align = 'left'; #ページを左揃えにする場合はleft,中央ぞろえにする場合はcenterに $cnts = '1'; #閲覧数カウント (1=IP解析をする 2=IP解析しない 空白=表示しない) $cntdir = './cnt/'; #カウント数のログを保存するディレクトリ $hos = '1'; #ホスト表示 (1=ID化する 2=ID化しない 空白=表示しない) $sel = '1'; #作品修正時に、記事を最上欄に上げるかどうかの設定 (1=投稿者選択 2=上げる 空白=そのまま) $byte = '1'; #作品の総文字数をカウントしない場合は 1 を削除 $iplim = ''; #作品の作者からの感想投稿を制限する場合は 1 を入れる $iplim2 = ''; #同じ人の感想の連続投稿を制限する場合は 1 を入れる $frlim = '1'; #海外の自動投稿プログラム対策 (1=拒否する 空白=チェックしない) $del_dir = './del/'; #作品削除ログを保存するディレクトリ(管理モード時のみ閲覧可) $del_max = '100'; #削除ログ最大記録数設定 $wait = '00'.'00'.'05'.'00'; #作品の連続投稿の禁止期間 (左から順に'日','時','分','秒'。標準は5分) @tag = ("table","meta","!--","form","embed","script","frame"); #禁止タグ設定( , で区切って追加) @tab = ("Title","Name","投稿日","閲覧数","Byte","Res","Point");#一覧の表題の記述設定(※閲覧数や文字数などを表示しない設定でも","は削除しないこと) @sort = ("日付順","作品名順","作者名順","閲覧数順","文字数順","返信数順","点数順");#並び替えフォームの記述設定(※上と同様","は残しておく) #-------------------------投稿者背景の設定---------------------------# $haik = '1'; #背景を統一する場合は 1 を消す(※この場合文字色も統一) #投稿FORMに32×32サイズでアイコンが表示されるので、正方形の画像を使用 #---'',で区切って画像URLを指定することにより、何個も追加できます。--# @IMG = ( './bg_a.gif', './bg_b.gif', './bg_c.gif', './bg_d.gif', './bg_e.gif', './bg_f.gif', './bg_g.gif', './bg_h.gif', ''); #-----------------------投稿者文字色の設定--------------------------# $moir = '1'; #文字色を統一する場合は 1 を消す @FONT = ( '#000000', '#0000A0', '#800040', '#E10000', '#005100', '#4F4F4F', '#575700', '#B500B5', '#5400A8', '#003377', ''); #---------投稿作品表示ページのベース背景、テキスト、リンク色設定---# $sakutit = '1'; #作品閲覧時のタイトルバーの表示文字(1=作品の前書き,空白=作品の題名[前書き機能OFF]) $bg_c = '#ffffff'; #背景色 $txt_c = '#000000'; #テキスト色 $link_c = '#00cc00'; #リンク色 $pass = 'abc123'; #管理者passwordの設定 $list = '30'; #TOPpage 1pageに表示する記事数一覧のリスト数設定 $list2 = '5'; #1pageに表示する感想記事数一覧のリスト数設定 $list3 = '10240'; #閲覧時の作品分割設定 (数字=1pageに表示するbyte数[標準は10KB] 空白=分割機能OFF) $max = '100'; #最大記録保持数設定 この件数に達すると、ログのbackupを作成します。(backupを設定した場合。) $max2 = '50'; #感想ログ最大記録数設定 $n_view = '3'; #NEW,UPの表示期間 (日) ( 0 を指定すると表示しなくなる) $n_img = ''; #NEWを画像にする場合(./new.gifを削除するとNEW!!という文字が表示されます。) $u_img = ''; #編集投稿した場合にupdate画像を表示する場合 $rom = ''; #一般投稿を募集しない場合は 1 を入れる(あなただけが投稿できるようになる) #------------------------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=点数入力式,空白=採点なし) $plus_c = 'blue'; #得点が+のときの得点色(標準は青。#0000ffなどと色番号で指定しても良い) $minus_c = 'red'; #得点が−のときの得点色(標準は赤。上に同じ) #--- 採点機能で 1 を選択した場合の評価と点数一覧(評価のタイトル=点数) ---# @POINT = ( '普通=10', 'とても良い=50', '良い=30', '良くない=-20', '最悪=-30'); #--- 採点機能で 1 を選択した場合の点数の上限,下限設定 ---# $maxp = '100'; #最高点設定 $minp = '0'; #最低点設定 #-------イタズラ対策---# $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 <$title【メニュー】
■ホームに戻る
■一覧に戻る
HTML
#ここは新規投稿を打ち切る場合に必要な処理です
if ($FORM{'log'} eq "" && $rom eq "") {
if ($cnt <= $max) {
print "
■新規投稿\n";
}
}
print <■説明書
■検索
■管理用
HTML } #新規投稿・検索のページなどで上部に表示するメッセージ sub mes3{ print < ■一覧に戻る HTML #こちらは投稿作品の編集時の場合のみ表示するメッセージ if ($FORM{'key'}) { print "■作品に戻る\n"; print "■削除・編集に戻る\n"; } } #説明のページで表示するメッセージ("\"は文字化け防止用なので削除しないこと) sub mes4{ print <
|
●こちらは詩歌・ショートショートのような短編を公開する専用掲示板です。 ●作品を閲覧するには、一覧で作品の題名を選択してください。 ●作品の一覧は$list件ごとにページが分かれて表\示されます。 ●作品を投稿するには、「新規投稿」の欄からどうぞ。 ●「お名前」と「作品名」・「パスワード」以外は入力は任意です。 ●作品にパスワードを設定するので、投稿した後も編集・削除が可能\です。 ●半角カナは使用しないでください。文字化けの原因となります。 ●また仕様上、半角コンマ「,」は使えません。全角コンマ「,」に置き換えてください。 HTML #バックアップの設定によって異なる処理 if ($backup) { print "●現在の作品投稿数は$cnt件です。$max件を超えると現在の作品集の投稿を締め切ります。 \n"; } else { print "●現在の作品投稿数は$cnt件です。$max件を超えると若い記事から削除されます。 \n"; } #連続投稿禁止期間が 0 の時は非表示 if ($wait + 0) { if ($wait < 100) { $p_wait = $wait + 0; $p_wait .= '秒'; } elsif ($wait < 10000) { $p_wait = $wait / 100; $p_wait .= '分'; } elsif ($wait < 1000000) { $p_wait = $wait / 10000; $p_wait .= '時間'; } elsif ($wait < 100000000) { $p_wait = $wait / 1000000; $p_wait .= '日'; } print "●作品の連続投稿は、以前の投稿から$p_wait以上経ってからにしてください。 \n"; } #NEW,UPの表示期間が 0 の時は非表示 if ($n_view) { if ($u_img eq "") { $up = ""; } else { $up = " \n"; print "●同じく$n_view日以内に修正された作品には $up がつきます。 \n"; } print < HTML #採点方法によって異なる処理。採点機能OFFの時は非表示 if ($point eq "1") { print "●感想には、あなた自身の評価の点をつけられます。セレクトボックスからお好みの評価を選んでください。 ●評価の配点は、@POINTです。 \n"; } elsif ($point eq "2") { print "●感想には、あなた自身の評価の点をつけることができます。 ●$minp点から$maxp点までの間でお好みの点数をつけられます。 \n"; } print < ●感想・作品には一部のタグを除き、HTMLタグが使用可能\です。 ●また、感想・作者コメントではリンクは自動で貼\られます。 HTML #前書き機能OFFの時は非表示 if ($sakutit ne "") { print "●一覧表\示時に、作品の題名にカーソ\ルを合わせると「前書き」が表\示されます。前書きのない作品では何も表\示されません。 \n"; print "●作品閲覧時のタイトルバーには前書きが表\示されますが、前書きの無い作品は作品の題名になります。 \n"; } print < ●作品の長さが10KB(=10240 byte)を超える作品については、長さをKB単位で表\します。 HTML #作品の分割機能OFFの時は非表示 if ($list3 ne "") { print "●また、$list3 byteを超える長い作品は、閲覧時に自動的に分割して表\示されます。 \n"; } print < HTML #採点機能OFFの時は非表示 if ($point ne "") { print "●「$tab[6]」は評価の合計です。オンカーソ\ルで採点の内訳が表\示されます。 \n"; } print < ●また、同じメニューから作品を指定した方法で並び替えることもできます。 |
\n"; if ($backup eq '1') { &dir; } &tyo; print "\n"; exit; } sub html { #トップページ local($count); &file; &date; ⊤ print "
"; &load; 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; } if ($FORM{'sort'}) { &sort; if ($FORM{'sort'} eq "saku1" ) { foreach ($page .. $page_end) { ($tit,$date,$num,$b_num,$pwd,$name,$mail,$url,$value,$come,$fcol,$img,$host,$re,$mgki,$count,$rescnt,$points) = split(/\,/,$vline[$_]); chop($points); &rep; } } elsif ($FORM{'sort'} eq "saku2" ) { foreach ($page .. $page_end) { ($name,$date,$num,$b_num,$pwd,$tit,$mail,$url,$value,$come,$fcol,$img,$host,$re,$mgki,$count,$rescnt,$points) = split(/\,/,$vline[$_]); chop($points); &rep; } } elsif ($FORM{'sort'} eq "visit") { foreach ($page .. $page_end) { ($count,$date,$num,$b_num,$pwd,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$host,$re,$mgki,$rescnt,$points) = split(/\,/,$vline[$_]); chop($points); &rep; } } elsif ($FORM{'sort'} eq "leng" ) { foreach ($page .. $page_end) { ($leng,$date,$num,$b_num,$pwd,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$host,$re,$mgki,$count,$rescnt,$points) = split(/\,/,$vline[$_]); chop($points); &rep; } } elsif ($FORM{'sort'} eq "rescnt" ) { foreach ($page .. $page_end) { ($rescnt,$date,$num,$b_num,$pwd,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$host,$re,$mgki,$count,$points) = split(/\,/,$vline[$_]); chop($points); &rep; } } elsif ($FORM{'sort'} eq "points" ) { foreach ($page .. $page_end) { ($points,$date,$num,$b_num,$pwd,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$host,$re,$mgki,$count,$rescnt) = split(/\,/,$vline[$_]); chop($rescnt); &rep; } } else { 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); &rep; } } } else { 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); &rep; } } print "\n"; &list; } else{ print "
【作品が投稿されていません】\n"; } print "
/) { $value =~ s/\r/
/g; }
$value =~ s///g;
if ($FORM{'page3'} eq '') { $page3 = 1; }
else { $page3 = $FORM{'page3'}; }
if ($list3 && length($value) > $list3) { $lencnt = &partition; }
$come =~ s/\0/\,/g;
$come =~ s/\r/
/g;
$come =~ s/(http:[!#-9A-~]+)/$1<\/a><\/b>/g;
if ($fcol eq "") { $fcol = $txt_c; }
if ($haik) {
print "\n";
}
else { print "$body\n"; }
print "\n";
print "$title_col\n";
print "$tit\n";
print "\n";
print "
作者:\n";
if ($mail ne "")
{ print "$name\n"; }
else
{ print "$name\n"; }
if ($url ne "")
{ print " URL: http://$url\n"; }
print " $date公開\n";
print "
\n";
print "\n";
print "
\n";
print "$value\n";
print "
\n";
print "\n";
if (!$lencnt || $lencnt == $page3) {
print "
\n";
print "\n";
print "
\n";
print "- ■作者からのメッセージ
- \n";
if ($come ne "")
{ print "$come\n"; }
else
{ print "作者からのメッセージはありません。\n"; }
print "
\n";
}
print "
\n";
&link;
print "
\n";
print "■一覧に戻る";
print " ■感想を見る\n";
print "■削除・編集\n";
print "\n";
&foot;
exit;
}
sub html4 {
#作者検索一覧
if (!$FORM{'sakusha'}) { &html; }
if (!open(FD,"$file")) { print "ERROR!! ログファイル$fileがみつかりません。\n"; }
@lines = ;
close(FD);
foreach (@lines) {
($date,$num,$b_num,$pwd,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$host,$re,$mgki) = split(/\,/,$_);
chop($mgki);
if ($FORM{'sakusha'} eq $name) { push(@bassline,$_); }
}
@lines = @bassline;
$cnt = @bassline;
if ($cnt==0) { &error("指定した作者は存在しません。"); }
&date;
⊤
print "$FORM{'sakusha'}さんの作品 \n";
print "\n";
print "$body\n";
print "\n";
print "$title_col\n";
print "$FORM{'sakusha'} さんの作品\n";
print "\n";
print "[ 現在 $cnt 作品公開中 ]\n";
&load;
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) = split(/\,/,$lines[$_]);
chop($mgki);
&rep;
}
print "\n";
&list;
print "
\n";
if ($FORM{'log'} eq "") {
print "[検索に戻る]\n";
print "[一覧へ戻る]\n";
}
else {
print "[検索に戻る]\n";
print "[一覧に戻る]\n";
}
print "\n";
&foot;
exit;
}
sub html5 {
#語句検索一覧
$serch = $FORM{'serch'};
if ($serch eq "") { &error("検索語句を指定してください。"); }
$serch =~ s/\x81\x40/ /g;
@serch = split(/\s+/,$serch);
if (!open(FD,"$file")) { print "ERROR!! ログファイル$fileがみつかりません。\n"; }
@lines = ;
close(FD);
foreach (@lines) {
$tmp = $_;
foreach (@serch) {
if (index($tmp,$_) >= 0) { $flag=1; }
else { $flag=0; last; }
}
if ($flag) { push(@bassline,$_); }
}
@lines = @bassline;
$cnt = @bassline;
&date;
⊤
print "「$FORM{'serch'}が含まれる作品」 \n";
print "\n";
print "$body\n";
print "\n";
print "$title_col\n";
print "「$FORM{'serch'}」が含まれる作品\n";
print "\n";
if ($cnt > 0) {
print "[ $cnt 作品が見つかりました。 ]\n";
&load;
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) = split(/\,/,$lines[$_]);
chop($mgki);
&rep;
}
print "\n";
&list;
}
else {
print "\n";
print "は見つかりませんでした。\n";
print "\n";
print "
\n";
}
print "
\n";
if ($FORM{'log'} eq "") {
print "[検索に戻る]\n";
print "[一覧に戻る]\n"; }
else {
print "[検索に戻る]\n";
print "[一覧に戻る]\n";
}
print "\n";
&foot;
exit;
}
sub regist {
#記事書き込み
if (!$post) { &error("不正アクセスです。") }
if ($frlim) { &access($FORM{'value'},$FORM{'access'},10); }
$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'}\,$FORM{'name'}\,$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'}\,$FORM{'name'}\,$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'}\,$FORM{'name'}\,$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;
&cook1("name\:$FORM{'name'}","mail\:$FORM{'mail'}","url\:$FORM{'url'}","pwd\:$FORM{'pwd'}");
&mail;
print "Location: $reload" . '?' . "log=$FORM{'log'}" . "\n\n";
}
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{'pwd'} > 8 || $FORM{'pwd2'} eq "" || $FORM{'pwd2'} =~ /\W/) {
&error("投稿者用PASSWORDを半角英数8文字で登録してください。");
}
if ($point eq "1") {
foreach (@POINT) {
if ($_ ne '') {
($pt1,$pts) = split(/=/,$_);
if ($pts eq $FORM{'point'}) { $p_flag=1; last; }
}
}
if (!$p_flag) { &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;
&cook1("name\:$FORM{'name_r'}","mail\:$FORM{'mail_r'}","url\:$FORM{'url_r'}","pwd\:$FORM{'pwd2'}");
print "Location: $link3&action=review\n\n";
}
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;
&cook2;
⊤
print "$formtit \n";
print "\n";
print "$body\n";
print "\n";
if ($title_img eq "") {
print "$title_col\n";
print "$formtit\n";
print "\n";
}
else {
print "
\n";
}
&mes3;
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); }
$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;
$lencnt = &partition;
}
if ($FORM{'bg2'} eq "") { $img = $FORM{'bg'}; }
else { $img = $FORM{'bg2'}; }
$fcol = $FORM{'fcol'};
⊤
print "$FORM{'tit'} はこのイメージで表\示されます \n";
print "\n";
if ($haik ne "")
{ print "\n"; }
else
{ print "$body\n"; }
print "\n";
print "※あなたの投稿作品はこのイメージで表\示されます
\n";
print "$title_col\n";
print "$FORM{'tit'}\n";
print "\n";
print "
作者:\n";
if ($FORM{'mail'} ne "")
{ print "$FORM{'name'}\n"; }
else
{ print "$FORM{'name'}\n"; }
if ($FORM{'url'} ne "")
{ print " URL: http://$FORM{'url'}\n"; }
print " ****年**月**日(week) **時**分**秒 公開\n";
print "\n";
print "
\n";
print "\n";
print "
\n";
print "$value\n";
print "
\n";
print "\n";
print "
\n";
if (!$lencnt || $lencnt == $page3) {
print "\n";
print "
\n";
print "- ■作者からのメッセージ
- \n";
if ($FORM{'come'} ne "") { print "$FORM{'come'}\n"; }
else { print "作者からのメッセージはありません。\n"; }
print "
\n";
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 "$body\n";
print "\n";
print "ERROR!!
\n";
print "$_[0]
\n";
&foot;
exit;
}
sub deleview {
#作品の削除選択画面
if (!open(FD,"$file")) { &error("ファイル読込みに失敗しました。"); }
@lines = ;$cnt = @lines;
close(FD);
⊤
print "削除選択 \n";
print "\n";
print "$body\n";
print "\n";
&title;
print "■一覧へ戻る\n";
if ($rom eq "1")
{ print "■新規作品公開\n"; }
&del_log_show;
print "
削除項目を選択してください。
\n";
print "\n";
&link;
&list;
&foot;
exit;
}
sub deleview2 {
#感想の削除選択画面
$file2 = "$resdir" . "$FORM{'key'}" . '.txt';
if (!open(FD,"$file2")) { &error("ファイル読込みに失敗しました。"); }
@blines = ; $rescnt = @blines;
close(FD);
&link;
⊤
print "削除選択 \n";
print "\n";
print "$body\n";
print "\n";
print "[戻る]\n";
print "削除項目を選択してください。
\n";
print "\n";
&list2;
&foot;
exit;
}
sub dele {
#作品記事削除
local($del,$del2);
if (!$post) { &error("不正アクセスです。"); }
if (!$in_flag && (!$FORM{'pwd'} || $FORM{'pwd'} ne $pass)) { &error("PASSWORDが一致しません。"); }
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;
}
sub dele2 {
#管理者感想記事削除
local($del,$del2);
if (!$post) { &error("不正アクセスです。"); }
if (!$FORM{'pwd'} || $FORM{'pwd'} ne $pass) { &error("PASSWORDが一致しません。"); }
if (!@CK) { &error("削除する記事にチェックが入っていません。"); }
&lock;
$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(/\,/,$_);
$del = 0;
foreach (@CK) {
if ($_ eq $renum) { $del=1; $del2=1; }
}
if (!$del) { push(@new,$_); }
}
if (!$del2) { &error("該当記事が見当たりません。"); }
if (!open(FD,">$file2")) { &error("ファイル読込みに失敗しました。"); }
print FD @new;
close(FD);
&unlock;
}
sub dele3 {
#投稿者感想記事削除
local($del) = 0;
if (!$post) { &error("不正アクセスです。"); }
&lock;
$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) {
if ($pwd2 ne "" && crypt($FORM{'pwd2'},substr($pwd2,0,2)) eq $pwd2) { $del=1; next; }
&error("PASSWORDが一致しません。");
}
push(@new,$_);
}
if (!$del) { &error("該当記事が見当たりません。"); }
if (!open(FD,">$file2")) { &error("ファイル読込みに失敗しました。"); }
print FD @new;
close(FD);
&unlock;
print "Location: $link3&action=review\n\n";
}
sub serch {
#検索ページ
local(%names,@nline,$nname,$nno);
&file;
⊤
print "作品の検索 \n";
print "\n";
print "$body\n";
print "\n";
&title;
&mes3;
print "検索したい語句を入力するか、作者を選択してください\n";
print "
\n";
print "\n";
print "作品を指定した方法で並び替えます
\n";
print "\n";
&foot;
exit;
}
sub admin {
#管理画面
⊤
print "管理者入り口 \n";
print "\n";
print "$body\n";
print "\n";
&title;
&mes3;
print "\n";
&foot;
exit;
}
sub exp {
#説明書閲覧
if (!open(FD,"$file")) { &error("ファイル読込みに失敗しました。"); }
@lines = ;$cnt = @lines;
close(FD);
⊤
print "$titleの説明 \n";
print "\n";
print "$body\n";
print "\n";
&title;
&mes3;
&mes4;
&foot;
exit;
}
sub review {
#感想記事閲覧
&cook2;
&date;
&file2;
⊤
print "$titの感想 \n";
print "\n";
if ($fcol eq "") { $fcol = $txt_c; }
if ($haik ne "") {
print "\n";
}
else { print "$body\n"; }
$tit =~ s/\0/\,/g;
print "\n";
print "$title_col2$tit の感想\n";
&link;
print "■作品に戻る\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[$_]);
chop($pwd2);
$come_r =~ s/\0/\,/g;
$come_r =~ s/\r/
/g;
$come_r =~ s/(http:[!#-9A-~]+)/$1<\/a><\/b>/g;
print "
\n";
print "\n";
print "[$no] \n";
if ($mail_r ne "")
{ print "投稿者:$name_r\n"; }
else { print "投稿者:$name_r\n"; }
if ($url_r ne "")
{ print " [URL]\n"; }
if ($point ne "") {
if ($poi > 0) { $poi = "$poi"; }
elsif ($poi < 0) { $poi = "$poi"; }
print " 評価:$poi点\n";
}
print " ■$date_r\n";
if ($hos ne "") {
if ($hos eq "1") { $host_r = crypt ($host_r," "); }
print " ID :$host_r\n";
}
print " $come_r \n";
print "
\n";
--$no;
}
}
else {
print "
\n";
print "\n";
print "感想記事の投稿は現在ありません。
\n";
print "
\n";
}
}
else {
print "
\n";
print "\n";
print "感想記事の投稿は現在ありません。
\n";
print "
\n";
}
if ($rescnt != 0) {
&list2;
print "
\n";
print "総レス数 $rescnt \n";
if ($point ne "") {
if ($points > 0) { $points = "$points"; }
elsif ($points < 0) { $points = "$points"; }
else{ $points = 0; }
print " 合計 $points 点 \n";
}
print "
\n";
}
print <★感想を書いてね★
E-Mail(任意)
HOME URL(任意) http://
メッセージ
HTML
if ($point eq '1') {
print "評価(必須)\n";
print " \n";
}
elsif ($point eq '2') {
print "評価(必須)点\n";
print " \n";
}
print "削除用パス \n";
print <
HTML
if ($iplim) {
$chost = crypt ($host," ");
print "\n";
}
print "
\n";
print "
■作品に戻る\n";
print "■一覧に戻る\n";
print "■削除・編集\n";
print "\n";
&foot;
exit;
}
sub admin2 {
#作品の管理画面
&cook2;
&file2;
⊤
print "$titの編集 \n";
print "\n";
if ($fcol eq "") { $fcol = $txt_c; }
if ($haik ne "")
{ print "\n"; }
else { print "$body\n"; }
$tit =~ s/\0/\,/g;
print "\n";
print "$title_col2$tit の編集\n";
&link;
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 pv {
#背景・文字色確認プレビュー
⊤
print "背景と文字色はこのように表\示されます \n";
print "\n";
print "\n";
foreach (@FONT) {
if ($_ ne '') {
print "Anthologys\n";
print " \n";
print "Anthologys\n";
print " \n";
print "($_)\n";
print "
\n";
}
}
print "
\n";
print "\n";
print "【閉じる】\n";
print "\n";
&foot;
exit;
}
sub cook1 {
#クッキー発行(KENTさん[http://www.kent-web.com/]のクッキー処理を引用)
local(@cook) = @_;
local($gmt, $cook, @t, @m, @w);
@t = gmtime(time + 60*24*60*60);
@m = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec');
@w = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
$gmt = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT",$w[$t[6]], $t[3], $m[$t[4]], $t[5]+1900, $t[2], $t[1], $t[0]);
$cook="";
foreach (@cook) { $cook .= "$_\,"; }
print "Set-Cookie: $cookiename=$cook; expires=$gmt\n";
}
sub cook2 {
#クッキー取得
local($cookies,$n,$v,$n2,$v2,@pairs,@pairs2);
$cookies = $ENV{'HTTP_COOKIE'};
@pairs = split(/;/,$cookies);
foreach (@pairs) {
($n, $v) = split(/=/, $_);
$n =~ s/ //g;
$DUMMY{$n} = $v;
}
@pairs2 = split(/,/,$DUMMY{$cookiename});
foreach (@pairs2) {
($n2, $v2) = split(/:/, $_);
$COOKIE{$n2} = $v2;
}
}
sub backfile {
#過去ログ生成
local($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,$b_name,@dirfile);
opendir(DIR,$dir);
@dirfile = readdir(DIR);
closedir DIR;
if (@dirfile <= 3) { return; }
print "【作品集】
\n";
if ($FORM{'log'} ne $_) {
print "○最新作品集\n";
}
else {
print "●最新作品集\n"; }
foreach (@dirfile) {
if ($_ =~ /.txt/ && $_ !~ /anthology.txt/) {
$i++;
$b_files = "$dir" . "$_";
if ($b_files ne '') {
$_ =~ s/.txt//;
$b_name = $backname . $i;
if ($FORM{'log'} ne $_) {
print "
○$b_name\n";
}
else {
print "
●$b_name\n";
}
}
}
}
print "
\n";
}
sub encopass {
#パスワード暗号化処理(KENTさん[http://www.kent-web.com/]のパスエンコードを引用)
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 {
#リンク先の条件分岐
if ($FORM{'sakusha'}) {
$link = "$reload?log=$FORM{'log'}&sakusha=$FORM{'sakusha'}&action=html4";
$link2 = "$link&key=$FORM{'key'}&page=$FORM{'page'}";
$link3 = "$link2&page3=$FORM{'page3'}";
}
elsif ($FORM{'serch'}) {
$link = "$reload?log=$FORM{'log'}&serch=$FORM{'serch'}&action=html5";
$link2 = "$link&key=$FORM{'key'}&page=$FORM{'page'}";
$link3 = "$link2&page3=$FORM{'page3'}";
}
elsif ($FORM{'sort'}) {
$link = "$reload?log=$FORM{'log'}&sort=$FORM{'sort'}";
$link2 = "$link&key=$FORM{'key'}&page=$FORM{'page'}";
$link3 = "$link2&page3=$FORM{'page3'}";
}
else {
$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 title {
#タイトルの文字・画像の表示定義
if ($title_img eq "") {
print "$title_def\n";
print "$title\n";
print "\n";
}
else {
print "
\n";
}
}
sub title {
#タイトルの文字・画像の表示定義
if ($title_img eq "") {
print "$title_col\n";
print "$title\n";
print "\n";
}
else { print "
\n"; }
}
sub newup {
#NEW,UPの表示
if ($n_view && $n_view*1000000 >= $line_num - $num) {
if ($re eq '1') {
if ($u_img eq "")
{ print "\n"; }
else
{ print "
\n"; }
}
else {
if ($n_img eq "")
{ print "\n"; }
else
{ print "
\n"; }
}
}
}
sub sort {
#並び替え処理
local($count,$vlen);
foreach (@lines) {
($date,$num,$b_num,$pwd,$tit,$name,$mail,$url,$value,$come,$fcol,$img,$host,$re,$mgki) = split(/\,/,$_);
chomp($mgki);
$points = 0;
$files = $resdir . $num . '.txt';
if (-e $files) {
open(MD,"$files");
@blines = ; $rescnt = @blines;
close(MD);
if ($rescnt != 0) {
foreach (@blines) {
($date_r,$renum,$name_r,$mail_r,$url_r,$come_r,$poi,$host_r) = split(/\,/,$_);
chop($host_r);
$points += $poi;
}
}
else { $points = ''; }
}
else { $rescnt = 0; $points = ''; }
if ($cnts) { $count = &count3; }
if ($FORM{'sort'} eq "saku1") {
$line = "$tit\,$date\,$num\,$b_num\,$pwd\,$name\,$mail\,$url\,$value\,$come\,$fcol\,$img\,$host\,$re\,$mgki\,$count\,$rescnt\,$points\n";
}
elsif ($FORM{'sort'} eq "saku2") {
$line = "$name\,$date\,$num\,$b_num\,$pwd\,$tit\,$mail\,$url\,$value\,$come\,$fcol\,$img\,$host\,$re\,$mgki\,$count\,$rescnt\,$points\n";
}
elsif ($FORM{'sort'} eq "visit") {
$line = "$count\,$date\,$num\,$b_num\,$pwd\,$tit\,$name\,$mail\,$url\,$value\,$come\,$fcol\,$img\,$host\,$re\,$mgki\,$rescnt\,$points\n";
}
elsif ($FORM{'sort'} eq "leng") {
$vlen = $value;
$vlen =~ s/<[^>]*(>|$)//g;
$leng = length($vlen);
$line = "$leng,$date\,$num\,$b_num\,$pwd\,$tit\,$name\,$mail\,$url\,$value\,$come\,$fcol\,$img\,$host\,$re\,$mgki\,$count\,$rescnt\,$points\n";
}
elsif ($FORM{'sort'} eq "rescnt") {
$line = "$rescnt\,$date\,$num\,$b_num\,$pwd\,$tit\,$name\,$mail\,$url\,$value\,$come\,$fcol\,$img\,$host\,$re\,$mgki\,$count\,$points\n";
}
elsif ($FORM{'sort'} eq "points") {
$line = "$points\,$date\,$num\,$b_num\,$pwd\,$tit\,$name\,$mail\,$url\,$value\,$come\,$fcol\,$img\,$host\,$re\,$mgki\,$count\,$rescnt\n";
}
else { return; }
push(@vline,$line);
}
if ($FORM{'sort'} eq "saku1" || $FORM{'sort'} eq "saku2") { @vline = sort @vline; }
else { @vline = sort { $b <=> $a } @vline; }
}
sub load {
#一覧表題の生成処理
print "";
print "\n";
print "$tab[0] \n";
print "$tab[1] \n";
print "$tab[2] \n";
print "$tab[3] \n" if ($cnts);
print "$tab[4] \n" if ($byte);
print "$tab[5] \n";
print "$tab[6] \n" if ($point ne "");
print " \n";
}
sub rep {
#一覧の生成処理
local($points,%ress,@reses,$rname,$rno,$rfin,%sp,@sps,$spk,$spno,$spfin,$count,$len,$vlen);
print "\n";
chomp($mgki);
print "\n";
&newup;
print "\n";
print "$tit\n";
print "\n";
print " \n";
print "\n";
if ($mail eq "") { print "$name\n"; }
else { print "$name\n"; }
print " \n";
print "$date \n";
$files = $resdir . $num . '.txt';
if (-e $files) {
open(MD,"$files");
@blines = ; $rescnt = @blines;
close(MD);
if ($rescnt != 0) {
foreach (@blines) {
($date_r,$renum,$name_r,$mail_r,$url_r,$come_r,$poi,$host_r,$pwd2) = split(/\,/,$_);
chop($pwd2);
if ($name_r ne '') { $ress{$name_r}++; }
if ($point ne "") {
if ($poi eq '') { $poi = 0; }
$sp{$poi}++;
$points += $poi;
}
}
}
else { $points = ''; }
}
else { $rescnt = 0; $points = ''; }
if ($cnts) {
$count = &count3;
print "\n";
print "$count\n";
print " \n";
}
if ($byte) {
$vlen = $value;
$vlen =~ s/<[^>]*(>|$)//g;
$len = length($vlen);
if ($len > 10240) { $len >>= 10; $len .= "k"; $len = "$len"; }
print "\n";
print "$len\n";
print " \n";
}
if ($rescnt) {
while ( ($rname,$rno) = each(%ress) ) {
if ($rno <= 1) { push(@reses,"〔$rname〕 \n"); }
else { push(@reses,"〔$rname($rno)〕 \n"); }
}
$reses[0] = " $reses[0]";
$rfin = pop(@reses); chomp($rfin); push(@reses,$rfin);
}
print "\n";
print "$rescnt\n";
print " \n";
if ($point ne "") {
if ($rescnt) {
while ( ($spk,$spno) = each(%sp) ) { push(@sps,"〔$spk点×$spno〕 \n"); }
$sps[0] = " $sps[0]";
$spfin = pop(@sps); chomp($spfin); push(@sps,$spfin);
}
if ($points eq "") { $points = '0'; }
elsif ($points > 0) { $points = "$points"; }
elsif ($points < 0) { $points = "$points"; }
print "\n";
print "$points\n";
print " \n";
}
print " \n";
}
sub list {
#一覧の改page処理(作品リスト)
local($pag,$no,$start,$final,$rlink);
$pag = 0;
$no = 1;
$start = $page + 1;
$final = $page + $list;
if ($FORM{'action'} eq 'sentaku' || $FORM{'action'} eq 'dele') {
$rlink = "$reload?log=$FORM{'log'}&action=sentaku&pwd=$FORM{'pwd'}";
}
else { $rlink = $link; }
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";
}
else { print "
作品はここまでです。\n"; }
}
sub list2 {
#感想一覧の改page処理(感想リスト)
local($pag,$no,$start,$final,$rlink);
$pag = 0;
$no = 1;
$start = $page2 + 1;
$final = $page2 + $list2;
if ($FORM{'action'} eq 'sentaku2' || $FORM{'action'} eq 'dele2')
{ $rlink = "$link3&action=sentaku2&pwd=$FORM{'pwd'}"; }
elsif ($FORM{'action'} eq 'review')
{ $rlink = "$link3&action=review"; }
else
{ return; }
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";
}
}
sub partition {
#作品内容の分割処理
local(@values,@tval,$i,$j,$tlen,$t,$no);
@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 = "【PAGE $page3/$lencnt】 ";
$no = 1;
if (!$html3_flag) {
while ($no <= $lencnt) {
if ($page3 ne $no) { $t .= "[$no] "; }
else { $t .= "[$no] "; }
$no++;
}
}
$t .= "
$tval[$page3 - 1]";
$pag3 = $page3 + 1;
if ($page3 < $lencnt) {
if (!$html3_flag) {
$t .= "
⇒To Be Continued...";
}
else {
$t .= "";
}
}
$value = $t;
}
return $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 del_log_show {
#削除ログ表示(管理者モード時のみ)
local($dfile);
if ($FORM{'log'} eq "")
{ $dfile = "$del_dir" . 'del_' . 'anthology' . '.txt'; }
else
{ $dfile = "$del_dir" . 'del_' . "$FORM{'log'}" . '.txt'; }
if (-e $dfile)
{ print "■削除LOG\n"; }
}
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が多すぎます。"); }
}
#Script_END