#!/usr/bin/perl require './jcode.pl'; #------------------------------------------ $ver="I-BOARD v7.2";# (アイコンレス掲示板) #------------------------------------------ ## #-------- 初期設定など ---------* ## $met = "POST"; # データ受け渡し方法(POST or GET) $backurl="../../index1.htm"; # 戻るURL(http://〜でOK) $pass = "tate94"; # 管理用のパスワード(半角英数字) $title = "ANT BBS"; # タイトル $tface = "Times New Roman"; # タイトルのフォント $tsize = 6; # タイトルのサイズ $tcolor= "#ff0000"; # タイトルの色(16進数) $text = "#808080"; # 標準文字色指定(16進数) $bg = "#ffffff"; # 背景色の指定(〃) $link = "#0000ff"; # 未リンク色の指定(〃) $vlink= "#0000ff"; # 既リンク色の指定(〃) $ttb = "#ffffff"; # 汎用的な表の色(〃) $k_back="#FFFFFF"; # 記事の中の背景色(〃) $t_back="#ff0000"; # 記事題名の背景色(〃) $t_font="#ffffff"; # 記事題名の文字色(〃) $trback="#ff0000"; # 返信題名の背景色(〃) $b_col ="#ff0000"; # 記事の表の線の色(〃) $back = ""; # 背景画像をURLで指定 無しの場合は何も記入しない $max = 70; # 親記事最大保持件数 $res_n= 2; # レスを使う?(0=NO 1=YES[A] 2=YES[B]) # [A]=記事の下にフォーム [B]=記事とは違うページにフォーム $res_r= 1; # レスが付くとトップへ?(1=YES 0=NO) $a_max= 5; # 1ページ表示件数(レス使用時は少なめに) $locks= 0; # ファイルをロックする?(1=YES 0=NO) $i_mode= 0; # アイコンモード?(1=YES 0=NO) $i_dir = "."; # アイコン画像のある場所(初期/同じディレクトリ) $i_hei = ""; # アイコンの縦幅(ピクセル指定) $i_wid = ""; # アイコンの横幅(〃) サイズを限定しない場合 両方記入しない $link_i= 0; # URLを画像に置きかえる?(1=YES 0=NO) $l_img = "home.gif"; # 上がYESの場合使う画像(アイコンと同じディレクトリに) # URLではなくて画像の名前だよ。 $h_hei = "25"; # リンク画像の縦幅(ピクセル指定) $h_wid = "46"; # リンク画像の横幅(〃) 画像を使う場合両方記入 #---------------------------------------------------+ # [ アイコンの設定 ] | # @ico1 はファイルの名前 (***.gif / ***.jpg など)| # @ico2 はアイコンの名前 (ネコ、イヌ、クマ、とか)| # @ico3 はランダムの画像候補(***.gif / ***.jpg など)| # ico1 ico2 は必ずペアで。長くなったら改行してもOK | # [管理者アイコン] 初期/右に設定済み | # [ランダム機能] 初期/左に設定済み | #---------------------------------------------------+ @ico1 = ('randam','cat1.gif','dog1.gif','rob1.gif','pen1.gif','td1.gif','rabi1.gif','ball1.gif','tel1.gif','master'); @ico2 = ('ランダム','しろねこ','いぬ','くるくるロボ','ぺんぎん','くま','うさぎ','ぼーるやろう','てるてるお嬢','管理者用'); @ico3 = ('cat1.gif','dog1.gif','rob1.gif','pen1.gif','td1.gif','rabi1.gif','ball1.gif','tel1.gif'); $mas_i= "master.gif"; # 管理者用アイコン(87行目に指定したメールアドレスで使用) $Ico_h= 4; # アイコン一覧で改行をする数 # 選択文字色を設定 (これは背景が初期設定の時、最適なもの) @fonts= ('#808080','#E199FD','#8C98E8','#FD9F9D','#F0AC0F','#6AB43F','#40A495'); # トップ上部のコメント(タグ可 広告タグ可) $com_top = <<"_COM_"; _COM_ # ↑は消しちゃダメです。 $s_ret= 0; # 記事を見る際の制限(0=しない 1=書くとき 2=書く&読むとき) $s_pas= "7777"; # 上記が1or2の場合のパスワード(半角英数2文字以上) $bup = 1; # バックアップをとる?(1=YES 0=NO) $bup_f = "./ibbsbup.bak"; # バックアップファイル $t_mail= 0; # 投稿があるとメール通知する?(1=YES 0=NO) $mymail= 1; # 自分の投稿も通知する?(1=YES 0=NO) $mail[0]='nsy@kiwi.ne.jp'; # メールアドレス(メール通知時/管理者専用アイコン使用時) $s_mail ='/usr/sbin/sendmail'; # sendmailパス ( 〃 ) $t_img= ""; # タイトル画像をURLで指定 $twid = "135"; # 〃 の横幅(ピクセル指定) $thei = "80"; # 〃 の縦幅( 〃 ) $wrap = "soft"; # フォームの改行形式(soft=手動 or hard=強制) $cou = 0; # カウンタの設置(1=YES 0=NO) $fig = 5; # カウンタの桁数 $c_co = "#8187FC"; # テキスト=> テキスト色 $m_wid= 8; # 画像=> 画像の横サイズ $m_hei= 12; # 〃 => 画像の縦サイズ $m_pas= ""; # 〃 => 画像のあるディレクトリのパス(使用する場合のみ) $c_f = "./icount.dat"; # カウンタファイルの名前 $c_loc= "icount.loc"; # ↑のロックファイル(使用は44行目に依存/ファイル名設定のみ) $cgi_f= "./ibbs.cgi"; # このファイル $log = "./ibbs.dat"; # 記録ファイル $lockf= "./ibbs.lock"; # ロックファイル(使用は44行目に依存) $srch = "./isrch.cgi"; # 検索/過去ログ閲覧用CGI $tag = 0; # タグの使用 (YES=1 NO=0) $a_link=1; # URL、E-MAILだとリンクする?(1=YES 0=NO) # -------- 過去ログ設定 --------* $klog_s= 1; # 過去ログ機能を使う?(1=YES 0=NO) $klog_c= "./ilog.log"; # 過去ログ数のカウントファイル $klog_d= "."; # 過去ログ生成ディレクトリ $klog_l= 100; # 過去ログ記録 KB 数 ## --------- $k_font="MS Pゴシック"; # 基本フォント(環境による) $k_size="10pt"; # 基本フォントサイズ(ptは単位) $ie_c = "#ff0000"; # リンクを合わせた時の色(16進数 IE向け) $fss=1; # フォームのスタイルシート利用(1=YES 0=NO) #--------------------------------------+ # [フォームのスタイルシート設定] | # 上の項目が 1 の場合設定 | # わからない場合は初期設定のままが賢明 | # $fst=StyleSheet $on/$off=JavaScript | #--------------------------------------+ $fst=<<"SS_"; input,textarea,select{ font-family :MS ゴシック; /*文字フォント*/ font-size :10pt; /* 文字サイズ */ color :#000000; /* 文字色 */ background-color:#FFFFFF; /* 背景色 */ border :1 solid #ff0000;/*線の太さ、色*/ scrollbar-face-color: #FF0000; /* スクロールバー表面の色 */ scrollbar-highlight-color: #CCCCCC; /* スクロールバー左上(ハイライト)の色 */ scrollbar-shadow-color: #666666; /* スクロールバー右下の色 */ scrollbar-3dlight-color: #999999; /* スクロールバー左上の色 */ scrollbar-track-color: #333333; /* スクロールバーのバックの色 */ scrollbar-arrow-color: #000000; /* 上下にある三角矢印の色 */ scrollbar-darkshadow-color: #000000 /* スクロールバー右下の影の色 */ } body{ scrollbar-face-color: #FF0000; /* スクロールバー表面の色 */ scrollbar-highlight-color: #CCCCCC; /* スクロールバー左上(ハイライト)の色 */ scrollbar-shadow-color: #666666; /* スクロールバー右下の色 */ scrollbar-3dlight-color: #999999; /* スクロールバー左上の色 */ scrollbar-track-color: #333333; /* スクロールバーのバックの色 */ scrollbar-arrow-color: #000000; /* 上下にある三角矢印の色 */ scrollbar-darkshadow-color: #000000 /* スクロールバー右下の影の色 */ } SS_ # ↑は削除不可 # マウスが乗ったときや、フォーカスをえた時の動作 $on= "backgroundColor='#eaebec'\;"; # マウスがどいたときや、フォーカスを失った時の動作 $off="backgroundColor='#FFFFFF'\;"; $ips[0]="xxx.xxx.xxx"; # 閲覧を許可しないIPアドレス(数字/最初の3区切りを指定) $ips[1]="yyy.yyy.yyy"; # 同じようにいくつでも指定可能 $ips[2]="zzz.zzz.zzz"; $NW[0]= "死ね"; # 禁止文字列 タグ使用の場合は禁止タグも入力OK $NW[1]= " 過去ログ\n";} &d_code_;if($s_ret && $mo eq "" && $mode eq ""){&pas_; } if($mode eq "bma"){ &bma_; } if($mode eq "man"){ &man_; } if($mode eq "wri"){ &wri_; } if($mode eq "del"){ &del_; } if($mode eq "s_d"){ &s_d_; } if($mode eq "nam"){ &hen_; } if($mode eq "h_w"){ &h_w_; } if($mode eq "res"){ &res_; } if($mode eq "key"){ &key_; } if($mode eq "cop"){ © } if($mode eq "img"){ &img_; } &html_; # # [パスワード認証] # sub pas_ { &hed_; print <<_PAS_;
パスワード認証
*書きこむにはパスワードが必要です!
_PAS_ if($s_ret==1){ print "記事の閲覧はできます(リードオンリー) 記事を閲覧する"; } &foot_; } # # [トップページ表示] # sub html_ { if($mo ne "R"){if($s_ret && $mo ne "$s_pas"){&er_("パスワードが違います!");}} &get_; open(LOG,"$log") || &er_("Can't open $log"); @lines = ; close(LOG); @NEW = (); foreach (0 .. $#lines) { ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type) = split(/<>/,$lines[$_]); if ($type == 0 || $type eq "") { push(@NEW,$lines[$_]); } } @lines = reverse(@lines); &hed_; if ($cou) { &con_; } print "
\n"; if ($t_img eq "") { print "$title\n"; } elsif ($t_img ne "") { print "\n"; } if($mo eq "R"){print"
";}else{ print <<"_HTML_";
トップ  □ セツメイショ  □ ケンサク $klog_link
_HTML_ #print ""; if ($i_mode == 1) { print "\n"; }else{print "";} print <<"_KEY_";
ナマエ
メール
タイトル サクジョキー (半角8文字以内)
コメント(適当に改行を入れて下さい)
URL
Color/\n"; #if ($c_font eq "") { #print "\n"; # foreach (1 .. $#fonts) { #print "\n"; # } #} else { # foreach (0 .. $#fonts) { # if ($c_font eq "$fonts[$_]") { #print "\n"; # } else { #print "\n"; # } # } #} print"
Icon/
"; print"(画像を選択/サンプル一覧)

_KEY_ } $total=@NEW; $page_=int(($total-1)/$a_max); if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; } $end_data = @NEW - 1; $page_end = $page + ($a_max - 1); if ($page_end >= $end_data) { $page_end = $end_data; } foreach ($page .. $page_end) { ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type) = split(/<>/,$NEW[$_]); if($email ne ""){ $name="$name"; } if($d_may eq ""){ $d_may="No Title"; } if($link_i == 1){ if ($url ne "") { $url=""; } } elsif ($link_i == 0){ if($url ne ""){$url="http://$url"; } } print <<"_HTML_";
$namber/ $d_may
ナマエ: $name
ヒヅケ: $date
$url
    _HTML_ $ico =~ s/\n//g; if ($i_mode == 1) { if ($i_hei eq ""){ print "
    \n"; } elsif($i_hei ne "") { print "\n"; } } else { print "\n"; } if ($a_link == 1) { &auto_($comment); } print "$comment

\n"; if($mo eq "R"){print"";}elsif($res_n==2){ print <<"_HTML_";
_HTML_ } $res = 0; foreach $lines(@lines) { ($rnam,$rdate,$rname,$rmail,$rd_may,$rcom,$rurl,$rfont,$rico,$rtype) = split(/<>/,$lines); if($namber eq "$rtype"){ if ($res == 0) { print "

\n"; $res=1;} if($rmail ne "") { $rname="$rname"; } if($rd_may eq ""){ $rd_may="No Title"; } if($link_i == 1){ if($rurl ne "") { $rurl=""; } }elsif($link_i == 0){ if($rurl ne ""){$rurl="http://$rurl";} } print <<"_HTML_";
$rnam/ $rd_may
・投稿者/ $rname
・投稿日/ $rdate
$rurl
    _HTML_ $ico =~ s/\n//g; if ($i_mode == 1) { if ($i_hei eq ""){ print "\n"; } elsif($i_hei ne "") { print "\n"; } } else { print "\n"; } if ($a_link == 1) { &auto_($rcom); } print "
    $rcom

\n"; } } if($res){print "
\n";} print "
"; if($res_n == 2 || $mo eq "R"){print "


\n";} elsif($res_n == 1){&fom_;} } print "
\n"; $next_line = $page_end + 1; $back_line = $page - $a_max; if($mo ne ""){$RFB="";$RLB="\&mo=$mo";} if ($back_line >= 0) { print <<"_BACK_"; _BACK_ } if ($page_end ne $end_data) { print <<"_NEXT_"; _NEXT_ } print"
$RFB
$RFB
全ページ数 / "; $a=0; for($i=0;$i<=$page_;$i++){ $af=$page/$a_max; if($i eq $af){ print "[$i] \n"; }else{ print "[$i]\n"; } $a+=$a_max; } print <<"_HTML_";
ヘンシュウ/サクジョフォーム
キジナンバー
(半角数字)
削除キー


_HTML_ &foot_; } # # [別ページレス] # sub res_ { &get_; open(DB,"$log"); @lines = ; close(DB); @lines = reverse(@lines); @new = (); $flag = 0; foreach $line (@lines) { ($nam,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type) = split(/<>/,$line); if ($namber eq "$nam") { if ($d_may eq ""){$d_may="No Title";} $type =~ s/\n/0/g; &hed_; if ($a_link == 1) { &auto_($comment); } print <<"_HTML_"; □ モドル
記事ナンバー[$namber] 返信フォーム

$nam/ $d_may
・投稿者/ $name
・投稿日/ $date
$comment



_HTML_ $tit=$d_may; } if ($namber eq "$type") { print <<"_HTML_";
$nam/ $d_may
・投稿者/ $name
・投稿日/ $date
$comment

_HTML_ } } print "
\n"; $v=1;&fom_; &foot_; } # # [フォーム] # sub fom_ { if($v){$w=22;$t=85;if($tit=~ /^re:/){$tit;}else{$tit="re: $tit";}} else{$w=20;$t=80;if($d_may=~ /^re:/){$tit=$d_may;}else{$tit="re: $d_may";}} print <<"_HTML_";
△$namber/ $tit へ返信
Name Comment ▽
メール
URL
タイトル
サクジョキー
_HTML_ if($i_mode){ print "Icon/ \n"; } print "FontColor/\n"; if ($c_font eq "") { print "\n"; foreach (1 .. $#fonts) { print "\n"; }} else { foreach (0 .. $#fonts) { if ($c_font eq "$fonts[$_]") { print "\n"; } else { print "\n"; } } } print "

\n"; } # # [ログ書きこみ処理] # sub wri_ { if ($FORM{'name'} eq "") { &er_("名前が未入力!"); } if ($FORM{'comment'} eq "") { &er_("コメントが未入力!"); } if (length($delkey) > 8) { &er_("削除キー は8文字以内!"); } if ($locks == 1) { &lock_; } open(LOG,"$log") || &er_("Can't open $log"); @lines = ; close(LOG); if($bup){&backup_;} ($knum,$kd,$kname,$kem,$ksub,$kcom) = split(/<>/,$lines[0]); if ($name eq $kname && $comment eq $kcom) { &er_("二重投稿は禁止です!"); } &set_; &cry_; $ipip = $ENV{'REMOTE_ADDR'}; if($ico eq "randam"){ srand; $randam = @ico3-1; $ico = "$ico3[int(rand($randam))]"; }elsif($ico eq "master"){ if($email ne "$mail[0]"){&er_("管理者用アイコンは使用できません!");} $ico=$mas_i; } if ($res_r == 1 && $type != 0) { @r_date = (); @new = (); foreach (0 .. $#lines) { $resres = 0; ($nam,$d,$na,$mail,$d_m,$com,$u,$f,$i,$ty,$de,$ip) = split(/<>/,$lines[$_]); $ty =~ s/\n/0/g;$de =~ s/\n//g;$ip =~ s/\n//g; $i =~ s/\n//; if ($ty == 0 && $nam eq "$type") { $new_line = "$nam<>$d<>$na<>$mail<>$d_m<>$com<>$u<>$f<>$i<>$ty<>$de<>$ip<>\n"; $resres = 1; } elsif ($ty eq "$type") { push(@r_data,$lines[$_]); $resres = 1; } if ($resres == 0) { push(@new,$lines[$_]); } } unshift(@new,$new_line); unshift(@new,@r_data); }else{ $h = 0; foreach (0 .. $#lines) { ($nam,$d,$na,$mail,$d_m,$com,$u,$f,$i,$ty,$de,$ip) = split(/<>/,$lines[$_]); $ty =~ s/\n/0/g;$de =~ s/\n//g;$ip =~ s/\n//g; $i =~ s/\n//; if ($ty == 0) { $h++; } push(@new,$lines[$_]); if ($h >= $max-1) { last; } } } if($namber eq "") {$namber = $knum + 1;} unshift (@new,"$namber<>$date<>$name<>$email<>$d_may<>$comment<>$url<>$font<>$ico<>$type<>$epasswd<>$ipip<>\n"); open(LOG,">$log") || &er_("Can't write $log"); print LOG @new; close(LOG); if ($klog_s) { &log_; } if (-e $lockf) { unlink($lockf); } if ($mymail == 0){ if ($t_mail == 1 && $FORM{'email'} ne $mail[0]) { &mail_; } } elsif ($mymail == 1){ if ($t_mail == 1) { &mail_; } } if($s_ret){$mo="$s_pas";} } # # [記事一括削除] # sub s_d_ { if ($FORM{'pass'} ne "$pass") { &er_("パスワードが違います!"); } open(DB,">$log"); printf DB ""; close(DB); } # # [説明書] # sub man_ { if($tag) { $tagcom = "使用できます。\n"; }elsif ($tag == 0){ $tagcom = "使用できません。\n"; } if($res_n){ $rescom = "
  • このBBSは返信\機\能\があり、記事下のフォームから返信します。
  • " }elsif($res_n == 2){ $rescom = "
  • このBBSは返信\機\能\があり、親記事のフォームをクリックし返信します。
  • " } &hed_; print <<"_HTML_"; □ モドル
    $title の使い方
    • この掲示板 (以下BBS) はタグを$tagcom
    • 記事は最大$max件まで保持できます。
    • 他人を中傷するような記事は管理者の判断で予\告\無く削除する場合があります。
    • 半角カナは使用しないでください。文字化けの原因になります。
    • 名前、コメントは必須記入項目です。記入漏れするとエラーになります。
    • このBBSは、クッキー対応です。(ブラウザでクッキー有効にしている時に限り)
    • $rescom
    • 削除キーを覚えておくと、一番下のフォームから自分の記事の削除ができます。 削除した記事が親記事だった場合、レス記事もすべて削除されます。
    _HTML_ &foot_; } # # [ヘッダ表示] # sub hed_ { print "Content-type: text/html\n\n"; print "\n"; print <<"_HTML_"; $title _HTML_ print"\n";} elsif ($back eq "") { print ">\n";} print <<"_HED_"; _HED_ } # # [フッタ表示] # sub foot_ { print <<"_HTML_";
    _HTML_ print"\n"; exit; } # # [フォームなデコード] # sub d_code_ { if ($ENV{'REQUEST_METHOD'} eq "POST") { if ($ENV{'CONTENT_LENGTH'} > 51200) { &error("文章があまりに長すぎます!"); } read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { $buffer = $ENV{'QUERY_STRING'}; } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; &jcode'convert(*value,'sjis'); if ($tag == 0) { $value =~ s//\>\;/g; $value =~ s/\"/\"\;/g; } else { $value =~ s/<>/\<\;\>\;/g; $value =~ s///g; } $FORM{$name} = $value; foreach(0..$#NW){if(index($value,$NW[$_]) >= 0){&er_("「$NW[$_]」は使用できません!");}} if ($name eq 'del') { push(@d_,$value); } } $d_may= $FORM{'d_may'}; $name = $FORM{'name'}; $comment = $FORM{'comment'};$comment =~ s/\r\n/
    /g;$comment =~ s/\r|\n/
    /g; $email = $FORM{'email'}; $url = $FORM{'url'};$url =~ s/^http\:\/\///; $mode = $FORM{'mode'}; $ico = $FORM{'ico'}; $font = $FORM{'font'}; $kiji = $FORM{'kiji'}; $namber=$FORM{'namber'}; $type = $FORM{'type'}; $delkey=$FORM{"delkey"}; $mo =$FORM{"mo"}; $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time); $year=$year+1900; $mon++; if ($mon < 10) { $mon = "0$mon"; } if ($mday < 10) { $mday = "0$mday"; } if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } if ($sec < 10) { $sec = "0$sec"; } $week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat') [$wday]; $date = "$year\/$mon\/$mday\($week\) $hour\:$min\:$sec"; } # # [クッキー発行] # sub set_ { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 30*24*60*60); $yearg += 1900; if ($secg < 10) { $secg = "0$secg"; } if ($ming < 10) { $ming = "0$ming"; } if ($hourg < 10) { $hourg = "0$hourg"; } if ($mdayg < 10) { $mdayg = "0$mdayg"; } $month = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong]; $youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg]; $date_gmt = "$youbi, $mdayg\-$month\-$yearg $hourg:$ming:$secg GMT"; $cook="name\:$name\,email\:$email\,url\:$url\,ico\:$ico\,font\:$font\,delkey\:$delkey"; print "Set-Cookie: IBBS=$cook; expires=$date_gmt\n"; } # # [クッキー取得] # sub get_ { $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/,$DUMMY{'IBBS'}); foreach $pair (@pairs) { ($name, $value) = split(/:/, $pair); $COOKIE{$name} = $value; } $c_name = $COOKIE{'name'}; $c_email= $COOKIE{'email'}; $c_url = $COOKIE{'url'}; $c_ico = $COOKIE{'ico'}; $c_font = $COOKIE{'font'}; $c_key = $COOKIE{'delkey'}; if ($FORM{'name'}) { $c_name = $FORM{'name'}; } if ($FORM{'email'}) { $c_email= $FORM{'email'}; } if ($FORM{'url'}) { $c_url = $url; } if ($FORM{'ico'}) { $c_ico = $FORM{'ico'}; } if ($FORM{'font'}) { $c_font = $FORM{'font'}; } if ($FORM{'delkey'}) { $c_key = $FORM{'delkey'}; } } # # [管理ページ] # sub del_ { if ($FORM{'pass'} ne "$pass") { &er_("パスワードが違います!"); } &hed_; print <<"_HTML_"; □ モドル
    管理モード
    _HTML_ open(DB,"$log"); @lines = ; close(DB); @NEW = (); foreach (0 .. $#lines) { ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type) = split(/<>/,$lines[$_]); if ($type == 0 || $type eq "") { push(@NEW,$lines[$_]); } } @lines = reverse(@lines); if (-s $log) { $l_size = -s $log; }else{ $l_size = 0; } print <<"_HTML_"; 現在のログのサイズ:$l_size バイト
    ■ 記事を編集したい場合、その記事のタイトルをクリック。
    ■ 削除したい記事にチェックを入れ「削除」ボタンを押す。
    ■ 名前の下の数字は IPアドレス (無い場合、v5.0以前での書き込み)
    □ 親記事を削除するとレス記事もすべて削除されます。
    $msg
    _HTML_ $total=@NEW; $page_=int(($total-1)/$a_max); if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; } $end_data = @NEW - 1; $page_end = $page + ($a_max - 1); if ($page_end >= $end_data) { $page_end = $end_data; } foreach ($page .. $page_end) { ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$delkey,$ip) = split(/<>/,$NEW[$_]); $type =~ s/\n/0/g;$delkey =~ s/\n//g;$ip =~ s/\n//g; $comment =~ s/
    / /g; if ($tag) { $comment =~ s//>/g; } if (length($comment)>80){$comment = substr($comment,0,78);$comment = $comment . '..'; } if ($email ne "") { $name = "$name"; } if ($d_may eq "") { $d_may= "No Title"; } print <<"_HTML_"; _HTML_ foreach $lines(@lines) { ($rnam,$rdate,$rname,$rmail,$rd_may,$rcom,$rurl,$rfont,$rico,$rtype,$rd,$rip) = split(/<>/,$lines); $rtype =~ s/\n/0/g;$rd =~ s/\n//g;$rip =~ s/\n//g; $resmsg= "
    ($rtypeのレス)"; if ($namber eq "$rtype"){ $rcom =~ s/
    / /g; if ($tag) { $rcom =~ s//>/g; } if (length($rcom) > 60) { $rcom = substr($rcom,0,58); $rcom = $rcom . '..'; } if ($rmail ne "") { $rname="$rname"; } if ($rd_may eq ""){ $rd_may= "No Title"; } print <<"_HTML_"; _HTML_ } } } print "
    チェック記事NO タイトル投稿者コメント
    親記事[$namber] $d_may $name
    $ip
    $comment
    [$rnam]$resmsg $rd_may $rname
    $rip
    $rcom

    \n"; print "
    \n"; $next_line = $page_end + 1; $back_line = $page - $a_max; if ($back_line >= 0) { print <<"_BACK_"; _BACK_ } if ($page_end ne $end_data) { print <<"_NEXT_"; _NEXT_ } print "
    全ページ数 / \n"; $a=0; for($i=0;$i<=$page_;$i++){ $af=$page/$a_max; if($i eq $af){ print "[$i] \n"; }else{ print "[$i]\n"; } $a+=$a_max; } print"
    \n"; if($klog_s){ print <<"_COPY_";
    現在のログを過去ログにコピー(v6.0以前から使用している人に限り使用可能\)

    _COPY_ } if($bup){ if (-e $bup_f) { $bl=int(-M $bup_f);$bs=-s $bup_f; $bc="$bs バイト、$bl 日前のバックアップあり。"; }else{$bc="バックアップはありません。";} print <<"_HTML_";
    $bc

    _HTML_ } print <<"_HTML_";
    ログフォーマット
    _HTML_ &foot_; } # # [記事編集] # sub hen_ { if($mo eq ""){ if ($FORM{'del'} eq "") { &er_("登録NO が未入力!"); } if ($delkey eq "") { &er_("削除キー が未入力!"); } $kiji=$FORM{'del'}; }elsif($mo == 1){if($FORM{'pass'} ne "$pass"){ &er_("パスワードが違います!"); }} open(DB,"$log"); @lines = ; close(DB); @new = (); $flag = 0; foreach $line (@lines) { ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$epasswd,$ip) = split(/<>/,$line); if ($kiji eq "$namber") { if($mo eq ""){ if($epasswd eq "") { &er_("この記事は削除キーが存在しません!"); } &cryma_($epasswd); if($ok eq "n"){ &er_("パスワードが違います!"); } $hen_l="$cgi_f"; }else{$hen_l="$cgi_f?mode=del&pass=$FORM{'pass'}";} $type =~ s/\n/0/g;$delkey=~ s/\n//g; if($FORM{'pass'} eq ""){$FORM{'pass'}=$delkey;} &hed_; $comment =~ s/
    /\n/g; if ($tag) { $comment =~ s//>/g; } print <<"_HTML_"; □ モドル
    記事ナンバー[$namber] の編集
    _HTML_ if ($i_mode == 1) { print "\n"; } print "
    Name/
    E-Mail/
    Title/
    URL/
    Comment▽ (適当に改行を入れて下さい)
    Icon/ (アイコンを選択して下さい)
    FontColor/\n"; if ($font eq "") { print "\n"; foreach (1 .. $#fonts) { print "\n"; }} else { foreach (0 .. $#fonts) { if ($font eq "$fonts[$_]") { print "\n"; } else { print "\n"; } } } print <<"_EDIT_";
    _EDIT_ &foot_; } } } # # [パスワード暗号化] # sub cry_ { $time = time; ($p1, $p2) = unpack("C2", $time); $wk = $time / (60*60*24*7) + $p1 + $p2 - 8; @saltset = ('a'..'z','A'..'Z','0'..'9','.','/'); $nsalt = $saltset[$wk % 64] . $saltset[$time % 64]; $epasswd = crypt($FORM{'delkey'}, $nsalt); } # # [パスワード解読] # sub cryma_ { if ($epasswd =~ /^\$1\$/) { $crptkey = 3; } else { $crptkey = 0; } $ok = "n"; if (crypt($FORM{'delkey'}, substr($epasswd,$crptkey,2)) eq $epasswd) {$ok = "y";} } # # [削除処理] # sub key_ { if($mo eq ""){ if ($FORM{'del'} eq "") { &er_("登録NO が 未入力!"); } if ($delkey eq "") { &er_("削除キー が未入力!"); } }elsif($mo == 1){if($FORM{'pass'} ne "$pass"){ &er_("パスワードが違います!"); }} open(DB,"$log") || &er_("Can't open $log"); @mens = ; close(DB); @CAS = ();$I=0; foreach $mens (@mens) { $mens =~ s/\n//g; ($nam,$d,$na,$mail,$d_m,$com,$u,$f,$i,$ty,$epasswd,$ip) = split(/<>/,$mens); $type =~ s/\n/0/g;$epasswd =~ s/\n//g;$ip =~ s/\n//g; foreach $namber (@d_) { if ($namber eq "$nam"||$namber eq "$ty") { if($mo eq ""){ if($epasswd eq "") { &er_("この記事は削除キーが存在しません!"); } &cryma_($epasswd); if($ok eq "n"){ &er_("パスワードが違います!"); } } $mens = ""; } } $n="\n"; if($mens eq ""){ $mens="";$n=""; if($I == 0){$mens = "$nam<><><><><><><><><>$nam<><><>";$n="\n";} } $I=1; push (@CAS,"$mens$n"); } open (DB,">$log"); print DB @CAS; close(DB); if($mo){&del_;}else{if($s_ret){$mo="$s_pas";}&html_;} } # # [編集記事置換] # sub h_w_ { if($mo){if($FORM{'pass'} ne "$pass"){ &er_("パスワードが違います!"); }} open(DB,"$log"); @lines = ; close(DB); if($ico eq "randam"){ srand; $randam = @ico3 - 1; $ico = "$ico3[int(rand($randam))]"; }elsif($ico eq "master"){ if($email ne "$mail[0]"){&er_("管理者用アイコンは利用不可!");} $ico=$mas_i; } @new = ();$flag = 0; foreach $line (@lines) { $line =~ s/\n//g; ($knam,$kda,$kname,$kemail,$kd_may,$kcomment,$kurl,$kfont,$kico,$kt,$kdel,$kip) = split(/<>/,$line); if ($namber eq "$knam") { if($mo eq ""){ $epasswd=$kdel;$FORM{'delkey'}=$FORM{'pass'}; &cryma_($epasswd); if($ok eq "n"){ &er_("パスワードが違います!"); } } $line = "$namber<>$kda<>$name<>$email<>$d_may<>$comment<>$url<>$font<>$ico<>$kt<>$kdel<>$kip<>"; $flag = 1; } push(@new,"$line\n"); } if ($flag == 0) { &er_("編集記事ナンバーが不正です。"); } if ($flag == 1) { open (DB,">$log"); print DB @new; close(DB); } if($mo){$msg="

    編集完了

    ";&del_;}else{if($s_ret){$mo="$s_pas";}&html_;} } # # [ロック処理] # sub lock_ { $lflag = 0; foreach (1 .. 5) { unless (-e $lockf) { open(LOCK,">$lockf"); close(LOCK); $lflag = 1; last; } else { sleep(1);} } if ($lflag == 0) { if (-e $lockf) { unlink($lockf); } &er_("LOCK is BUSY"); } } # # [メール通知] # sub mail_ { $mail_subj = "$title の投稿通知です。"; if ($type != 0 && $type ne ""){ $types = "(res comment)"; } &jcode'convert(*mail_subj,'jis'); &jcode'convert(*name,'jis'); &jcode'convert(*d_may,'jis'); &jcode'convert(*comment,'jis'); $comment =~ s/
    /\n/g; $comment =~ s/<//g; foreach $mailto (@mail) { if (open(MAIL,"| $s_mail $mailto")) { print MAIL "X-Mailer: IBBS MAILER\n"; print MAIL "To: $mailto\n"; if ($email eq "") { $email = "nomail\@xxx.xxx"; } print MAIL "From: $email\n"; print MAIL "Subject: $mail_subj\n"; print MAIL "Content-Transfer-Encoding: 7bit\n"; print MAIL "Content-type: text/plain\n"; print MAIL "\n\n"; print MAIL "$mail_subj\n"; print MAIL "--Comment-----------------------------\n"; print MAIL "Time : $date\n"; print MAIL "Name : $name\n"; print MAIL "Email: $email\n"; if ($url ne "") { print MAIL "URL : http://$url\n"; } if ($d_may eq "") { $d_may = "No Title"; } print MAIL "Title: $d_may $types\n\n"; print MAIL "$comment\n\n"; print MAIL "---------------------------------END--\n"; close(MAIL); } } } # # [URLなどを判断] # sub auto_ { $_[0]=~ s/([^=^\"]|^)((http|ftp)\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1$2<\/a>/g; $_[0]=~ s/([\w\.\-]+)\@([\w\.\-]+)/$1\@$2<\/a>/g; } # # [カウンタ処理] # sub con_ { open(NO,"$c_f") || &er_("Can't open $c_f",'0'); $cnt = ; close(NO); if ($FORM{'mode'} eq "") { $cnt++; if($locks){ $tmp = "$c_loc"; foreach (1 .. 10) { unless (-f $tmp) { $tf = 1; last; } $tf = 0; sleep(1); } if ($tf == 1) { $tmp_d = "$$\.tmp"; if (!open(TMP,">$tmp_d")) { &er_("Can't make tmpfile"); } close(TMP); if (!open(TMP,">$tmp_d")) { &er_("Can't make tmpfile"); } print TMP $cnt; close(TMP); foreach (1 .. 10) { unless (-f $tmp) { if (!open(TMP,">$tmp")) { &er_("Can't make tmpfile"); } close(TMP); rename($tmp_d,"$c_f"); unlink $tmp; $tf = 1; last; } $tf = 0; sleep(1); } } $tf; }else{ open(NO,">$c_f") || &er_("Can't write $c_f",'0'); print NO $cnt; close(NO); } } while(length($cnt) < $fig){ $cnt = 0 . $cnt; } @cnts = split(//,$cnt); print "
    \n"; if ($m_pas) { foreach (0 .. $#cnts) { print ""; } } else {print "$cnt";} print "


    \n"; } # # [エラー表示] # sub er_ { if (-e $lockf) { unlink($lockf); } &hed_; print "
    ERROR - $_[0]

    \n"; &foot_; } # # [過去ログ] # sub log_ { open(NO,"$klog_c") || &er_("Can't open $klog_c"); $n = ; close(NO); $klog_f = "$klog_d\/$n\.txt"; unless(-e $klog_f) { &log_n; } open(LOG,"$klog_f") || &er_("Can't open $klog_f"); @lines = ; close(LOG); $klog_size=$klog_l*1024; if(-s $klog_f > $klog_size) {&log_up;} open(LOG,">>$klog_f") || &er_("Can't write $klog_f"); print LOG "$namber<>$date<>$name<>$email<>$d_may<>$comment<>$url<><><>$type<><>$ipip<>\n"; close(LOG); } # # [カウントアップ] # sub log_up { $n++; open(NUM,">$klog_c") || &er_("Can't write $klog_c"); print NUM "$n"; close(NUM); $klog_f = "$klog_d\/$n\.txt"; &log_n; } # # [過去ログ生成] # sub log_n { $new_flag = 1; open(DB,">$klog_f") || &er_("Can't write $klog_f"); print DB ""; close(DB); chmod(0666,"$klog_f"); } # # [過去ログコピー] # sub copy { if ($FORM{'pass'} ne "$pass") { &er_("パスワードが違います!"); } open(DB,"$log"); @copy = ; close(DB); $klog_f = "$klog_d\/1\.txt"; unless(-e '1.txt') { &log_n; } if(-s '1.txt' > 0) {&er_("過去ログに記事があります!");} @copy=reverse(@copy); open(LOG,">>1.txt") || &er_("Can't write 1.txt"); print LOG @copy; close(LOG); $msg="

    コピー完了

    "; &del_; } # # [バックアップ処理] # sub backup_{ unless(-e $bup_f) { $klog_f=$bup_f;&log_n; } open(LOG,">$bup_f") || &er_("Can't write $bup_f"); print LOG @lines; close(LOG); } # # [修復処理] # sub bma_ { if (-e $lockf) { unlink($lockf); } rename ($bup_f,$log) || &er_("Rename Error"); $msg="

    修復完了

    "; &del_; } # # [画像表示] # sub img_ { &hed_; print"
    アイコン画像一覧
    "; print"
    *)見終わったらウィンドウを閉じて下さい

    "; $I=0; foreach (0..$#ico1){ if($ico1[$_] eq "randam" || $ico1[$_] eq "master"){next;} $I++; print"$ico2[$_] "; if($I >= $Ico_h){print"

    ";$I=0;} } print"
    "; &foot_; }