#!/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
_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 "全ページ数 / ";
$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_";
□ モドル
| $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_";
\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_";
□ モドル
- この掲示板 (以下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;
$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
全ページ数 / \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_";
_COPY_
}
if($bup){
if (-e $bup_f) { $bl=int(-M $bup_f);$bs=-s $bup_f;
$bc="$bs バイト、$bl 日前のバックアップあり。";
}else{$bc="バックアップはありません。";}
print <<"_HTML_";
_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; $comment =~ s/>/>/g; }
print <<"_HTML_";
□ モドル
_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_;
}