#!/usr/bin/perl require './jcode.pl'; #-------------------------------------------------- # I-BOARD Ver5.0 (アイコン式レス機能付き掲示板) #-------------------------------------------------- # Copyright(C) りゅういち # E-Mail:macchibi@mvf.biglobe.ne.jp # W W W :http://www2u.biglobe.ne.jp/~ryu_1/cj_c/ #-------------------------------------------------- #---------------------------------------------------------------- # 初期設定など #---------------------------------------------------------------- $met = "POST"; # データ受け渡し方法(POST or GET) $backurl="../index.html"; # 戻るURL(http://〜でOK) $pass = "7777"; # 管理用のパスワード(半角英数字) $title = "桜宮自然公園掲示板"; # タイトル $tface = "MS 明朝"; # タイトルのフォント $tsize = 6; # タイトルのサイズ $tcolor= "#FFA09B"; # タイトルの色(16進数) $text = "#000000"; # 標準フォント色指定(16進数) $bg = "#FFFFEC"; # バックカラーの指定(〃) $link = "#8A98F4"; # 未リンク色の指定 (〃) $vlink= "#73CE91"; # 既リンク色の指定 (〃) $ttb = "#FEF7B6"; # 説明書上部の表の色(〃) $k_back="#FFFFEC"; # 記事の中のバック色(〃) $t_back="#FEF7B6"; # 記事タイトルのバック色(〃) $t_font="#000000"; # 記事タイトルの色 (〃) $trback="#E1FFEF"; # 返信のタイトルの色(〃) $back = ""; # 背景画像がある場合URLで指定 # 無しの場合は何も記入しない。 $max = 70; # 親記事最大記事保持件数(多すぎると危険) $res_n= 1; # レスを使う?(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) # ディレクトリのパーミッションを[777]必要がある場合あり $i_mode= 0; # アイコンモード? (1=YES 0=NO) $i_dir = "."; # アイコン画像のある場所(同じディレクトリの場合はこのまま) $i_hei = ""; # アイコンの縦幅 (ピクセル指定) $i_wid = ""; # アイコンの横幅 (〃) # サイズを限定しない場合は両方とも記入しない $link_i= 1; # 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' と設定して @ico2 にそれを促す名前を設定。 # 最初の設定のままだと一番左にランダム設定されています。--------------------------# @ico1 = ('randam','cat1.gif','dog1.gif','rob1.gif','pen1.gif','td1.gif','rabi1.gif','ball1.gif','tel1.gif'); @ico2 = ('ランダム','しろねこ','いぬ','くるくるロボ','ぺんぎん','くま','うさぎ','ぼーるやろう','てるてるお嬢'); @ico3 = ('cat1.gif','dog1.gif','rob1.gif','pen1.gif','td1.gif','rabi1.gif','ball1.gif','tel1.gif'); # 選択文字色を設定 (これは背景が初期設定の時、最適なものです。) @fonts= ('#000000','#8C98E8','#954D8F','#F293A4','#EDB372','#6AB43F','#40A495'); # トップ上部のコメント(タグOK)広告用タグも入れてしまえます。 $com_top = ' ★人と緑の共生がテーマです★ ';# ←は消しちゃダメです。 #---------------------------------------------------------------- # 以下は状況に応じて設定 #---------------------------------------------------------------- $t_mail= 0; # 投稿があるとメール通知する?(1=YES 0=NO) $mymail= 1; # 自分の投稿も通知する?(1=YES 0=NO) $mail[0]= 'tmlarao@tml.co.jp'; # メールアドレス(メール通知する時) $s_mail = '/usr/slib/sendmail'; # sendmailパス(メール通知する時) $t_img = ""; # タイトル画像をURLで指定 $twid = "135"; #  〃 の横幅(ピクセル指定) $thei = "60"; #  〃 の縦幅( 〃 ) $cou = 1; # ミニカウンタの設置 (1=YES 0=NO) $fig = 5; # ミニカウンタの桁数 $c_co = "D00000"; # テキストのとき:ミニカウンタの色 $m_wid= 8; # 画像を使う時:画像の横サイズ $m_hei= 12; # 〃 :画像の縦サイズ $c_f = './icount.dat'; # カウンタファイルの名前 $wrap = "soft"; # コメントフォームの改行形式 (soft=手動 or hard=強制) $cgi_f= "./ibbs.cgi"; # このファイルの名前 $log = "./ibbs.dat"; # 記録ファイルの名前 $lockf= "./ibbs.lock"; # ロックファイルの名前 $tag = 0; # タグの使用 (YES=1 NO=0) $a_link= 1; # URL、E-MAILアドレスだと自動的にリンクする?(1=YES 0=NO) $b_url= "."; # 不正アクセスを排除 http:// からファイルのある位置を記入 # (イタズラされたら使いましょう) $k_font= "MS Pゴシック"; # 基本フォント(ブラウザによって対応、未対応フォントがある) $k_size= "11pt"; # 基本フォントサイズ ptは単位だから消さないように! # (11と指定すると、絶対値がIEだと2、NNだと3ぐらいの大きさ) $ie_c = "#E88C8E"; # リンクを合わせた時の色変化の指定 (16進数 IEのみ変化) #---------------------------------------------------------------- # 設定ここまで #---------------------------------------------------------------- $ver = "I-BOARD v5.0"; &d_code_; 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_; } &html_; #----------------- # トップページ表示 #----------------- sub html_ { &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"; } print <<"_HTML_";
MENU □ MANUAL $com_top
_HTML_ if ($i_mode == 1) { print "\n"; } print "
Name/
E-Mail/
URL/
Title/
Comment/ (適当に改行を入れて下さい)
Icon/ (アイコンを選択して下さい)
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"; print "(半角8文字以内) \n"; print "

\n"; 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 "
\n"; print <<"_HTML_";
[$namber]  $d_may
■ 投稿者:$name
■ 投稿日:$date
_HTML_ print "
$url
\n"; print "
\n"; $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($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
_HTML_ print "
$rurl
\n"; print "
\n"; $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"; print "
\n"; } } print "
"; if($res_n == 2){print "
\n";} elsif($res_n == 1){ print <<"_HTML_";
[$namber] $d_may への返信
Name/ Comment ▽
E-Mail /
URL /
Title /
削除キー/
_HTML_ if ($i_mode == 1) { 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"; } } print "
\n"; $next_line = $page_end + 1; $back_line = $page - $a_max; if ($back_line >= 0) { print "\n"; } if ($page_end ne $end_data) { print "\n"; } print "

\n"; print "\n"; print "\n"; print "

\n"; print "\n"; print "\n"; print "

\n"; print <<"_HTML_";
記事NO / (半角数字) 削除キー /


_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_"; □ BACK
記事ナンバー[$namber] 返信フォーム

[$nam]  $d_may
■ 投稿者:$name
■ 投稿日:$date
$comment

_HTML_ } if ($namber eq "$type") { print <<"_HTML_";

[$nam]  $d_may
■ 投稿者:$name
■ 投稿日:$date
$comment

_HTML_ } } print "
\n"; print <<"_HTML_";
_HTML_ if ($i_mode == 1) { print "\n"; } print "
記事NO [$namber] への返信
Name/
E-Mail/
URL/
Title/
Comment ▽
Icon/ (アイコンを選択して下さい)
FontColor/\n"; if ($c_font eq "") { print "\n"; foreach (1 .. $#fonts) { print "\n"; }} else { foreach (0 .. $#fonts) { if ($font eq "$fonts[$_]") { print "\n"; } else { print "\n"; } } } print "
削除キー/\n"; print "(半角8文字以内) \n"; print "

\n"; &foot_; } #----------------- # ログ書きこみ処理 #----------------- sub wri_ { if ($b_url ne ".") { $ref_url = $ENV{'HTTP_REFERER'}; $ref_url =~ s/\?(.|\n)*//ig; $ref_url =~ s/\%7E/\~/ig; if ($ref_url !~ $b_url) { &er_("不正なアクセスです!"); } } 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); ($knum,$kd,$kname,$kem,$ksub,$kcom) = split(/<>/,$lines[0]); if ($name eq $kname && $comment eq $kcom) { &er_("二重投稿は禁止です!"); } &set_; &cry_; if($ico eq "randam"){ srand; chop; $randam = @ico3; $ico = "$ico3[int(rand($randam))]"; } 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) = split(/<>/,$lines[$_]); $ty =~ s/\n/0<>/g; $de =~ 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<>\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) = split(/<>/,$lines[$_]); $ty =~ s/\n/0/g; $de =~ 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<>\n"); open(LOG,">$log") || &er_("Can't write $log"); print LOG @new; close(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_; } } } #------------- # 記事一括削除 #------------- sub s_d_ { if ($FORM{'pass'} ne "$pass") { &er_("パスワードが違います!"); } open(DB,"$log"); @lines = ; close(DB); @new = (); $flag = 0; foreach $line (@lines) { $line =~ s/\n//g; ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$delkey) = split(/<>/,$line); open(DB,">$log"); printf DB ""; close(DB); } } #------- # 説明書 #------- sub man_ { if($tag == 1) { $tagcom = "使用することができます。\n"; }elsif ($tag == 0){ $tagcom = "使用することはできません。\n"; } if($res_n == 1){ $rescom = "
  • このBBSは返信\機\能\があります。それぞれの記事の下にあるフォームから返信してください。
  • " }elsif($res_n == 2){ $rescom = "
  • このBBSは返信\機\能\があります。親記事にあるフォームをクリックし返信してください。
  • " } &hed_; print <<"_HTML_"; □ BACK
    $title の使い方
    • この掲示板 (以下BBS) はタグを$tagcom
    • 記事は最大$max件まで保持できます。
    • 他人を中傷するような記事は管理者の判断で予\告\無く削除する場合があります。
    • 半角カナは使用しないでください。文字化けの原因になります。
    • 名前、コメントは必須記入項目です。 記入漏れするとエラーになりますのでご注意ください。
    • このBBSは、クッキー対応です。(ブラウザでクッキー有効にしている時に限り)
    • $rescom
    • 削除キーを覚えておくと、一番下のフォームから自分の記事の削除ができます。

    _HTML_ &foot_; } #----------- # ヘッダ表示 #----------- sub hed_ { print "Content-type: text/html\n\n"; print "\n"; print <<"_HTML_"; _HTML_ print "\n"; print "$title\n"; if ($back ne "") { print "\n"; } elsif ($back eq "") { print "\n"; } print <<"_HTML_"; _HTML_ } #----------- # フッタ表示 #----------- sub foot_ { print <<"_HTML_";
    - I-BOARD -

    _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; } $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"}; if ($mode eq 'del') { push(@dels,$value); } $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_"; □ BACK
    管理モード
    _HTML_ open(DB,"$log"); @lines = ; close(DB); if ($FORM{'del_'} ne "") { @new=(); foreach $line (@lines) { $flag=0; $line =~ s/\n//; ($namber,$date,$name,$email,$d_may,$comment,$url,$font,$ico,$type,$delkey) = split(/<>/,$line); foreach $del_ (@dels) { if ($del_ eq "$namber") { $flag=1; next; } } if ($flag == 0) { push(@new,"$line\n"); } } open(DB,">$log"); print DB @new; close(DB); @lines = @new; } if (-s $log) { $l_size = -s $log; }elsif(-z $log){ $l_size = 0; } print <<"_HTML_"; 現在のログのサイズ:$l_size バイト
    ■ 削除したい記事にチェックを入れ「削除」ボタンを押して下さい。
    ■ 記事を編集したい場合、その記事のタイトルをクリックしてください。
    □ 親記事を削除してもレス記事は同時に削除されません。
    _HTML_ if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; } $end_data = @lines - 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) = split(/<>/,$lines[$_]); $comment =~ s/
    / /g; if ($tag) { $comment =~ s//>/g; } if (length($comment) > 60) { $comment = substr($comment,0,58); $comment = $comment . '..'; } if ($email ne "") { $name = "$name"; } if ($d_may eq "") { $d_may= "No Title"; } if ($type != 0 && $type ne "") { $resmsg= "
    ($typeのレス)"; } elsif($type == 0 || $type eq ""){$resmsg= "";} print <<"_HTML_"; _HTML_ } print "
    チェック記事ナンバー タイトル投稿者コメント
    [$namber]$resmsg $d_may $name$comment

    \n"; print "
    \n"; $next_line = $page_end + 1; $back_line = $page - $a_max; if ($back_line >= 0) { print "\n"; } if ($page_end ne $end_data) { 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 <<"_HTML_";
    記事をすべて削除します。

    _HTML_ &foot_; } #--------------- # 記事編集ページ #--------------- sub hen_ { 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,$delkey) = split(/<>/,$line); if ($kiji eq "$namber") { $type =~ s/\n/0/g; $delkey=~ s/\n//g; &hed_; $comment =~ s/
    /\n/g; if ($tag) { $comment =~ s//>/g; } print <<"_HTML_";
    記事ナンバー[$namber] の編集
    _HTML_ if ($i_mode == 1) { print "\n"; } print "
    Name/
    E-Mail/
    URL/
    Title/
    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 "
    \n"; print "\n"; print "

    \n"; &foot_; } } } sub cry_ { srand(); $passwd = "$delkey"; $xx = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"."abcdefghijklmnopqrstuvwxyz"."0123456789./"; $salt = substr($xx, int(rand(64)), 1); $salt .= substr($xx, int(rand(64)), 1); $epasswd = crypt($passwd, $salt); } sub cryma_ { $ok = "n"; if (crypt($pasewd, substr($_[0],0,2)) eq "$_[0]") {$ok="y";} } #----------------- # パスワード暗号化 #----------------- 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 ($namber eq "") { &er_("登録NO が入力されてません!"); } if ($delkey eq "") { &er_("パスワード が入力されていません!"); } open(DB,"$log") || &er_("Can't open $log"); @mens = ; close(DB); @CAS = (); foreach $mens (@mens) { $castam=0; $mens =~ s/\n//g; ($nam,$d,$na,$mail,$d_m,$com,$u,$f,$i,$ty,$epasswd) = split(/<>/,$mens); if ($namber eq "$nam") { if($epasswd eq "") { &er_("この記事は削除キーが存在しません!"); } &cryma_($epasswd); if($ok eq "n"){ &er_("パスワードが違います!"); } $mens = ""; $castam=1; } if($mens eq ""){ $n=""; }else{ $n="\n"; } push (@CAS,"$mens$n"); } open (DB,">$log"); print DB @CAS; close(DB); &hed_; print <<"_HTML_";
    登録削除完了

    記事NO $namber の登録内容は削除されました。


    BACK
    _HTML_ &foot_; } #--------------------- # 編集記事を書きかえる #--------------------- sub h_w_ { open(DB,"$log"); @lines = ; close(DB); @new = (); $flag = 0; foreach $line (@lines) { $line =~ s/\n//g; ($knam,$kdate,$kname,$kemail,$kd_may,$kcomment,$kurl,$kfont,$kico,$ktype,$kdel) = split(/<>/,$line); if ($namber eq "$knam") { $line = "$namber<>$date<>$name<>$email<>$d_may<>$comment<>$url<>$font<>$ico<>$type<>$delkey<>"; $flag = 1; } push(@new,"$line\n"); } if ($flag == 0) { &er_("編集記事ナンバーが不正です。"); } if ($flag == 1) { open (DB,">$log"); print DB @new; close(DB); } } #----------- # ロック処理 #----------- 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 ($FORM{'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: $FORM{'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、E-MAILを判断してリンクにする #---------------------------------- sub auto_ { $_[0] =~ s/([^=^\"]|^)(http\:[\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++; 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 (-e "$i_dir/0.gif") { foreach (0 .. $#cnts) { print "\"$cnts[$_]\""; } } else { print "$cnt"; } print "
    \n"; } #----------- # エラー表示 #----------- sub er_ { if (-e $lockf) { unlink($lockf); } &hed_; print "

    エラー発生!

    \n"; print "$_[0]


    \n"; &foot_; }