#!/usr/local/bin/perl
#↑あなたのブロバイダのCGIパスを記述してください。
#==================================================================#
# Anthologys v2.5e #
# Script by YASUU!! 2005/3/13 #
# Ver.Light Arrange by ZERO 2007/8/5 #
#==================================================================#
#======================あなたが設定する項目========================#
$body = '
'; #最初に表示されるページの設定
$reload = './light.cgi'; #このCGI ScriptのURL指定
$home = ''; #HomepageのURL指定
$title = 'Anthologys 詩歌集'; #タイトル
$title_img = ''; #タイトルにイメージを使用する場合、画像のURLを指定
$t_bg = '#B8B8DC'; #投稿作品一覧枠の全体背景
$tbg = '#aaaaaa'; #投稿作品一覧の表題の背景
$tbg2 = '#eeeeee'; #投稿作品一覧リストの背景
$textbg = './textbg.gif'; #textareaの背景(CSSを有効にした場合)
$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分)
$trips = '1'; #トリップ機能を使用する場合は 1 を入れる
@tag = ("table","meta","!--","form","embed","script","frame"); #禁止タグ設定( , で区切って追加)
@tab = ("Title","Name","投稿日","閲覧数","Byte","Res","Point"); #一覧の表題の記述設定(※閲覧数や文字数などを表示しない設定でも","は削除しないこと)
#-------------------------投稿者背景の設定---------------------------#
#投稿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',
'',
'',
'',
'');
#-----------------------投稿者文字色の設定--------------------------#
@FONT = (
'#000000',
'#0000A0',
'#800040',
'#E10000',
'#005100',
'#4F4F4F',
'#575700',
'#B500B5',
'#5400A8',
'',
'');
#---------投稿作品表示ページのタイトル表示、ベース背景、テキスト、リンク色設定---#
$sakutit = '1'; #作品閲覧時のタイトルバーの表示文字(1=作品の前書き,空白=作品の題名[前書き機能OFF])
$bg_c = '#ffffff'; #背景色
$txt_c = '#333333'; #テキスト色
$link_c = '#0000ff'; #リンク色
$pass = 'abc123'; #管理者passwordの設定
$list = '30'; #TOPpage 1pageに表示する記事数一覧のリスト数設定
$list2 = '5'; #感想記事管理page 1pageに表示する記事数一覧のリスト数設定
$max = '100'; #最大記録保持数設定 この件数に達すると、ログのbackupを作成します。。(backupを設定した場合。)
$max2 = '100'; #感想ログ最大記録数設定
$n_view = '3'; #NEW,UPの表示期間 (日) ( 0 を指定すると表示しなくなる)
$n_img = './new.gif'; #NEWを画像にする場合(./new.gifを削除するとNEW!!という文字が表示されます。)
$u_img = './up.gif'; #編集投稿した場合にupdate画像を表示する場合
$rom = ''; #一般投稿を募集しない場合は 1 を入れる(あなただけが投稿できるようになる)
#------------------------sendmailの設定-----------------------------#
$mailsend = ''; #mailを受け取る場合は 1 を入れる
$mailto = ''; #管理人のメールアドレス
$sendmail = '/usr/lib/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');
#--- 採点機能で 2 を選択した場合の点数の上限,下限設定 ---#
$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/';
#----------------------STYLE SHEETの設定---------------------------------#
$css = '1'; #style sheetの設定をしない場合は1を削除
sub style {
if ($styleflag) { return: }
print <
HTML
$styleflag = 1; #STYLE SHEETの二重呼び出し防止
}
#================設定項目はここまで(以下はプログラム)===============#
$cookiename = 'anthology';
#=以下のファイルはこの掲示板の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; &deleview; exit; }
elsif ($FORM{'action'} eq 'dele2') { &dele2; &deleview2; exit; }
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 'html4') { &html4; }
elsif ($FORM{'action'} eq 'html5') { &html5; }
elsif ($FORM{'action'} eq 'sentaku') {
if ($FORM{'pwd'} eq $pass) { &deleview; }
&error("PASSWORDが一致しません。"); }
elsif ($FORM{'action'} eq 'sentaku2') {
if ($FORM{'pwd'} eq $pass) { &deleview2; }
&error("PASSWORDが一致しません。"); }
elsif ($FORM{'action'} eq 'home') { &home; }
elsif ($FORM{'action'} eq 'in') { ∈ }
elsif ($FORM{'action'} eq 'pv') { &pv; }
&html;
sub top {
#HTMLヘッダ
if ($headflag) { return: }
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "\n";
print "\n";
if ($css eq '1') { &style; }
print "$title\n";
print "\n";
$headflag = 1;
}
sub html {
#トップページ
local(%names,@nline,$nname,$nno);
local($count);
&file;
&date;
⊤
print "$body\n";
&title;
print "
\n";
print "\n";
print "\n";
print "\n";
print "| \n";
if ($backup eq '1') { &dir; }
print " | \n";
print "
\n";
print "\n";
print "| \n";
print "\n";
if ($FORM{'log'} eq '') { print "投稿LIST [ 現在 $cnt 作品公開中 ]\n"; }
else { print "投稿LIST [ $cnt 作品 ]\n"; }
print "\n";
print " | \n";
print "
\n";
print "\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,$count,$rescnt,$points) = split(/\,/,$lines[$_]);
chop($points);
&rep;
}
print "
\n";
&list;
print "\n";
print "
\n";
print "
\n";
print "\n";
print "\n";
print "\n";
print "\n";
exit;
}
sub html2 {
#1件の作品のみ表示するView
&file2;
&cook2;
if ($cnts) { &count2; }
print "Content-type: text/html; charset=Shift_JIS\n\n";
print "\n";
print "\n";
if ($css eq '1') { &style; }
if ($sakutit eq "1") {
if ($mgki eq "") { print "$tit\n"; }
else { print "$mgki\n"; }
}
else {
print "$tit\n";
}
print "\n";
$tit =~ s/\0/\,/g;
$value =~ s/\0/\,/g;
if($value !~ //) { $value =~ s/\r/
/g; }
$come =~ s/\0/\,/g;
$come =~ s/\r/
/g;
$come =~ s/(http:[!#-9A-~]+)/$1<\/a><\/b>/g;
print "\n";
print "\n";
print "\n";
if ($css ne '1') {
print "| \n";
print " \n";
print "\n";
print "\n";
print "$tit\n";
print "\n";
print "\n";
print " \n";
print " | \n";
}
else {
print "\n";
print "\n";
print "$tit\n";
print "\n";
print " | \n";
}
print "
\n";
print "\n";
if ($css ne '1') {
print "| \n";
print "\n";
print "$value\n";
print "\n";
}
else {
print " | \n";
print "\n";
print "$value\n";
print "\n";
}
print " | \n";
print "
\n";
print "\n";
print "\n";
if ($mail ne "") { print "$name\n"; }
else { print "$name\n"; }
print "\n";
if ($url ne "") { print "http://$url \n"; }
print "$date 公開 \n";
print "■この作品の著作権は$nameさんにあります。無断転載は禁止です。 \n";
print " |
\n";
print "\n";
print "\n";
print "- ■作者からのメッセージ\n";
print "
- \n";
if ($come ne "") { print "$come\n"; }
else { print "作者からのメッセージはありません。\n"; }
print "
\n";
print " |
\n";
print "
\n";
print "\n";
print "| \n";
print "この作品の感想をお寄せください。\n";
print " |
\n";
$file2 = $resdir . $num . '.txt';
if (-e $file2) {
open(MD,"$file2");
@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);
$come_r =~ s/\0/\,/g;
$come_r =~ s/\r/
/g;
$come_r =~ s/(http:[!#-9A-~]+)/$1<\/a><\/b>/g;
print "\n";
print "| $come_r | \n";
if ($point ne "") {
$points += $poi;
if ($poi > 0) { $poi = "$poi"; }
elsif ($poi < 0) { $poi = "$poi"; }
print "$poi点 | \n";
}
if ($mail_r ne "") {
print "$name_r | \n";
}
else { print "$name_r | \n"; }
print "■$date_r | \n";
if ($hos ne "") {
if ($hos eq "1") { $host_r = crypt ($host_r," "); }
print "ID :$host_r | \n";
}
print "\n";
print "
\n";
}
if ($point ne "") {
if ($points > 0) { $points = "$points"; }
elsif ($points < 0) { $points = "$points"; }
print "| 合計 | \n";
print "$points点\n";
print " | | | | \n";
if ($hos ne "") { print " | \n"; }
print "
\n";
}
}
else {
print "| \n";
print "感想記事の投稿は現在ありません。\n";
print " |
\n";
}
}
else {
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";
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 "$body\n";
print "\n";
print "\n";
print "$FORM{'sakusha'} 作品集\n";
print "\n";
print "
\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";
print "
\n";
print "\n";
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 "$body\n";
print "\n";
print "\n";
print "「$FORM{'serch'}」が含まれる作品\n";
print "\n";
print "
\n";
if ($cnt > 0) {
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";
print "
\n";
}
else {
print "\n";
print "$serchを含む作品は見つかりませんでした。\n";
print "\n";
print "
\n";
print "戻る\n";
}
print "