#!/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;
$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 "
/) { $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";
&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 "
\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";
&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 .= "";
}
}
$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