#!/usr/bin/perl require './jcode.pl'; require './mo_hpa3_cfg.cgi'; $ver = 'MO_HPA v2.00'; #+-------------------------------------------------------------+# # MO_HPA Ver2.00 # # MOMO'S WEB DESIGN # # http://momo-s.info/ # # webmaster@momo-s.info # # Copyright(C) 2003 MOMO'S WEB DESIGN. All Rights Reserved. # #+-------------------------------------------------------------+# #====================================================================== # <<注意事項>>                            # このスクリプトはフリーで配布しています。              #  このスクリプトを使用したいかなる損害に対して            # 作者は一切の責任を負いません。 #  また、CSSなどを多用しているため全てのブラウザソフトで        #  反映されるものでもありません。 #  当サイトはWEB DESIGNのサイトです。そのためこのスクリプトを含め # デザインの改造は良識の範囲でお願い致します。 # 尚、著作権部分の削除は禁止します。 #====================================================================== &denial; &d_code; if ($mode eq "restore") { &restore; } elsif ($mode eq "readme") { &readme_html; } elsif ($mode eq "regist") { ®ist; } elsif ($mode eq "res") { &res_html; } elsif ($mode eq "admin") { &admin; } elsif ($mode eq "edit") { &edit_html; } elsif ($mode eq "l_del") { &l_delete; } elsif ($mode eq "e_wri") { &e_write; } elsif ($mode eq "img") { &img; } &main_html; #---------------------------------------# #-------**--- [ホスト制限] ---**--------# #---------------------------------------# sub denial { local($flag) = 0; foreach (@deny) { if ($ENV{'REMOTE_ADDR'} =~ /$_/) { $flag = 1; last; } } if ($flag) { &error("申し訳ありませんが、アクセスの許可がありません"); } } #---------------------------------------# #--**--- [メインフォームの表示] ---**---# #---------------------------------------# sub main_html { local(@lines,$lines,@NEW); &get_cookie; &head; &an_link; print "
\n"; print "\n"; print "\n"; &in_form; print "\n\n"; if ($u_reset) { print "\n"; } print "\n\n\n
\n"; #**-- [ログ表示] --** open(IN,"$log_f") || &error2("Cannot open $log_f"); @lines = ; close(IN); @NEW = (); foreach (0 .. $#lines) { local($number,$date,$name,$email,$subject,$comment,$url,$color,$icon,$resnum) = split(/<>/,$lines[$_]); if ($resnum == 0) { push(@NEW,$lines[$_]); } } @lines = reverse(@lines); if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; } $al = @NEW; $pg = int(($al - 1) / $p_max); $d_end = @NEW - 1; $p_end = $page + ($p_max - 1); if ($p_end >= $d_end) { $p_end = $d_end; } foreach ($page .. $p_end) { local($number,$date,$name,$email,$subject,$comment,$url,$color,$icon,$resnum) = split(/<>/,$NEW[$_]); $p_res = 1; &t_design; } # **--- [ページ操作] ---** print "\n\n"; $p_next = $p_end + 1; $p_back = $page - $p_max; if ($p_back >= 0) { print "\n"; } if ($p_end ne $d_end) { print "\n"; } print "\n
\n"; print "\n"; print "\n"; print "\n"; print "
\n
\n"; print "\n"; print "\n"; print "\n"; print "
\n
\n"; # **--- [ページ直接移動] ---** print "Page : "; $p = 0; for ($i = 0; $i <= $pg; $i++) { $ps = $page / $p_max; if ($i eq $ps) { print "$i /\n"; } else { print "$i /\n";} $p += $p_max; } print "\n"; # **--- [ユーザー編集・削除] ---** print "
\n"; print "\n\n\n"; print "\n"; print "\n"; print "\n"; print "\n
No. \n"; print " Pass : \n"; print "
\n
\n"; # **--- [管理画面へ移動] ---** print "
\n"; print "\n"; print "\n"; print "
\n"; print "
\n\n"; if ($count) { &counter; } &foot; } #---------------------------------------# #-----**--- [レスページ画面] ---**------# #---------------------------------------# sub res_html { local(@lines,$line,@new); &get_cookie; open(IN,"$log_f"); @lines = ; close(IN); @lines = reverse(@lines); foreach $line (@lines) { local($num,$date,$name,$email,$subject,$comment,$url,$color,$icon,$resnum) = split(/<>/,$line); if ($number eq "$num") { if ($subject eq "") { $subject = "No Title"; } if ($a_link) { &auto($comment); } $resnum =~ s/\n/0/g; &head; print ": BACK :
\n"; print " $number Resform\n

\n"; print "
\n\n"; print "\n\n\n"; print "\n\n\n"; $tit = $subject; } if ($number eq "$resnum") { if ($a_link) { &auto($comment); } print "\n\n\n"; } } print "
\n\n"; print "\n\n\n"; print "\n"; print "\n\n
 \n"; print " --$num $subject
$name --$date
\n

$comment

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

\n\n"; print "\n\n\n"; print "\n\n"; print "\n"; print "\n
 \n"; print " --$num $subject
$name --$date
\n

$comment

\n
\n"; print "
\n"; print "\n"; print "\n"; if ($tit =~ /^re:/) { $tit; } else { $tit = "re: $tit"; } &in_form; print "\n\n"; print "\n"; if ($u_reset) { print ""; } print "\n\n\n
\n"; &foot; } #---------------------------------------# #----**--- [ログ書きこみ処理] ---**-----# #---------------------------------------# sub regist { local(@lines,$lines,@new,$r_flag); &wr_check; &set_cookie; if (!&lock) { &error("只今、書き込み処理が混み合っています。
しばらく待ってもう一度アクセスしてください。"); } open(IN,"$log_f") || &error("Cannot open $log_f"); @lines = ; close(IN); if ($back_up) { &backup; } local($l_number,$l_date,$l_name,$l_email,$l_subject,$l_comment) = split(/<>/,$lines[0]); if ($delkey ne "") { &encry; } $usr_ip = $ENV{'REMOTE_ADDR'}; if ($r_sort && $resnum != 0) { @r_date = (); @new = (); foreach (0 .. $#lines) { $r_flag = 0; local($s_number,$s_date,$s_name,$s_email,$s_subject,$s_comment,$s_url,$s_color,$s_icon,$s_resnum,$s_delkey,$s_ip) = split(/<>/,$lines[$_]); $s_resnum =~ s/\n/0/g; $s_delkey =~ s/\n//g; $s_ip =~ s/\n//g; $s_icon =~ s/\n//; if ($name eq $s_name && $comment eq $s_comment) { &error("同じ内容のコメントは投稿できません","1"); } if ($s_resnum == 0 && $s_number eq "$resnum") { $new_line = "$s_number<>$s_date<>$s_name<>$s_email<>$s_subject<>$s_comment<>$s_url<>$s_color<>$s_icon<>$s_resnum<>$s_delkey<>$s_ip<>\n"; $r_flag = 1; } elsif ($s_resnum eq "$resnum") { push(@r_data,$lines[$_]); $r_flag = 1; } if ($r_flag == 0) { push(@new,$lines[$_]); } } unshift(@new,$new_line); unshift(@new,@r_data); } else { $h = 0; $full = 0; @log_data = (); foreach (0 .. $#lines) { $lines[$_] =~ s/\n//; local($s_number,$s_date,$s_name,$s_email,$s_subject,$s_comment,$s_url,$s_color,$s_icon,$s_resnum,$s_delkey,$s_ip) = split(/<>/,$lines[$_]); if ($lines[$_] eq "") { next; } if ($name eq $s_name && $comment eq $s_comment) { &error("同じ内容のコメントは投稿できません","1"); } $s_resnum =~ s/\n/0/g; $s_delkey =~ s/\n//g; $s_ip =~ s/\n//g; $s_icon =~ s/\n//; if ($s_resnum == 0) { $h++; } if (!$full) { push(@new,"$lines[$_]\n"); } elsif ($full && $plog_u) { unshift(@log_data,"$lines[$_]\n"); } else { last; } if ($h >= $max-1) { $full = 1; } } } if ($number eq "") { $number = $l_number + 1; } unshift (@new,"$number<>$date<>$name<>$email<>$subject<>$comment<>$url<>$color<>$icon<>$resnum<>$epasswd<>$usr_ip<>\n"); open(OUT,">$log_f") || &error("Cannot write $log_f"); print OUT @new; close(OUT); if ($plog_u && @log_data) { &plog; } if ($m_mail) { if ($mail_s) { &mail; } } else { if ($mail_s && $FORM{'email'} ne $master_m) { &mail; } } &unlock; } #---------------------------------------# #-----**---- [ReadMe 画面] -----**------# #---------------------------------------# sub readme_html { if ($tag_u) { $tagcom = "使用できます。\n"; } else { $tagcom = "使用できません。\n"; } &head; print ": BACK :\n"; print "
\n
$b_title の使い方

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

    \n"; print "
  • この掲示板で書き込むコメントにははタグを$tagcom
  • \n"; print "
  • 記事は最大$max件まで保持できます。
  • \n"; print "
  • ブラウザをクッキー有効に設定している場合には、このBBSは、クッキー対応です。
  • \n"; print "
  • 名前とコメント必須記入項目です。記入しないで投稿するとエラーになります。
  • \n"; print "
  • 半角カナ使用しないでください。文字化けの原因になります。
  • \n"; print "
  • このBBSは返信\機\能\があり、RESマークのフォームから返信します。
  • \n"; print "
  • 上部「SEARCH」のリンクから投稿記事のキーワード検索ができます。
  • \n"; print "
  • 投稿された記事は管理者の判断で予\告\無く全文削除、または部分削除する場合があります。
  • \n"; print "
  • Pass(英数字8文字以内)を入力して投稿されると、一番下のフォームから自分の記事の削除と編集がそのPassによってできます。\n"; print "削除したコメントが親記事だった場合は、レス記事もすべて削除されます。
  • \n"; print "
\n
\n
\n"; &foot; } #---------------------------------------# #------**--- [クッキー発行] ---**-------# #---------------------------------------# sub set_cookie { ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg) = gmtime(time + 60*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"; } $tuki = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong]; $youbi = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg]; $d_gmt = "$youbi, $mdayg\-$tuki\-$yearg $hourg:$ming:$secg GMT"; $cook = "name\:$name\,email\:$email\,url\:$url\,icon\:$icon\,color\:$color\,delkey\:$delkey"; print "Set-Cookie: MO_HPA=$cook; expires=$d_gmt\n"; } #---------------------------------------# #------**--- [クッキー取得] ---**-------# #---------------------------------------# sub get_cookie { local(@pairs,$value); $cookies = $ENV{'HTTP_COOKIE'}; @pairs = split(/;/,$cookies); foreach $pair (@pairs) { ($name,$value) = split(/=/,$pair); $name =~ s/ //g; $DUMMY{ $name } = $value; } @pairs = split(/,/,$DUMMY{'MO_HPA'}); foreach $pair (@pairs) { ($name,$value) = split(/:/,$pair); $COOKIE{ $name } = $value; } $c_name = $COOKIE{'name'}; $c_email = $COOKIE{'email'}; $c_url = $COOKIE{'url'}; $c_icon = $COOKIE{'icon'}; $c_color = $COOKIE{'color'}; $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{'icon'}) { $c_icon = $FORM{'icon'}; } if ($FORM{'color'}) { $c_color = $FORM{'color'}; } if ($FORM{'delkey'}) { $c_key = $FORM{'delkey'}; } } #---------------------------------------# #---**---- [マスター管理画面] ----**----# #---------------------------------------# sub admin { local(@lines,@NEW); if ($FORM{'pass'} ne "$pass") { &error("パスワードが違います"); } open(IN,"$log_f"); @lines = ; close(IN); @NEW = (); foreach (0 .. $#lines) { local($number,$date,$name,$email,$subject,$comment,$url,$color,$icon,$resnum) = split(/<>/,$lines[$_]); if ($resnum == 0) { push(@NEW,$lines[$_]); } } @lines = reverse(@lines); if (-s $log_f) { $l_size = -s $log_f; } else { $l_size = 0; } &head; print ": BACK :\n"; print "
\n
*-- MASTER PAGE --*
\n"; print "現在のログのサイズ : $l_size バイト\n$comp_mess\n"; print "\n\n\n\n
"; print "

* 編集したい場合はその記事のタイトルをクリックしてリンクページに移動。
\n"; print "* 削除したい場合は記事にチェックを入れ『DELETE』ボタンを押す。
\n"; print "* 名前の下の数字は IPアドレスです。 (ブラウザのバージョンによって取得できない場合あり)
\n"; print "* 親記事を削除するとレス記事もすべて削除されます。

"; 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\n"; $al = @NEW; $pg = int(($al - 1) / $p_max); if ($FORM{'page'} eq '') { $page = 0; } else { $page = $FORM{'page'}; } $d_end = @NEW - 1; $p_end = $page + ($p_max - 1); if ($p_end >= $d_end) { $p_end = $d_end; } foreach ($page .. $p_end) { local($number,$date,$name,$email,$subject,$comment,$url,$color,$icon,$resnum,$delkey,$ip) = split(/<>/,$NEW[$_]); $resnum =~ s/\n/0/g; $delkey =~ s/\n//g; $ip =~ s/\n//g; $comment =~ s/
/ /g; if ($tag_u) { $comment =~ s//>/g; } if (length($comment)>80) { $comment = substr($comment,0,78); $comment = $comment . '..'; } if ($email ne "") { $name = "$name"; } if ($subject eq "") { $subject = "No Title"; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n"; foreach $lines(@lines) { local($rnum,$rdate,$rname,$rmail,$rsubject,$rcom,$rurl,$rcolor,$ricon,$rresnum,$rdelkey,$rip) = split(/<>/,$lines); $rresnum =~ s/\n/0/g; $rdelkey =~ s/\n//g; $rip =~ s/\n//g; $resmsg = "$rresnumのRES"; if ($number eq "$rresnum") { $rcom =~ s/
/ /g; if ($tag_u) { $rcom =~ s//>/g; } if (length($rcom) > 60) { $rcom = substr($rcom,0,58); $rcom = $rcom . '..'; } if ($rmail ne "") { $rname = "$rname"; } if ($rsubject eq "") { $rsubject = "No Title"; } print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n"; } } } print "
チェックNO記事タイトル投稿者コメント
$number親記事$subject$name
$ip
$comment
$rnum$resmsg$rsubject$rname
$rip
$rcom
\n
\n\n"; print "\n
\n"; print "\n\n"; $p_next = $p_end + 1; $p_back = $page - $p_max; if ($p_back >= 0) { print "\n"; } if ($p_end ne $d_end) { print "\n"; } print "\n
\n"; print "\n"; print "\n"; print "\n"; print "\n
\n"; print "\n"; print "\n"; print "\n"; print "\n
\n"; print "Page : "; $p = 0; for ($i = 0; $i <= $pg; $i++) { $ps = $page / $p_max; if ($i eq $ps) { print "$i /\n"; } else { print "$i /\n"; } $p += $p_max; } print "\n"; if ($back_up) { if (-e $bup_f) { $back_d = int(-M $bup_f); $back_s = -s $bup_f; $back_c = "$back_s バイト、$back_d 日前のバックアップあります。"; } else { $back_c = "バックアップはありません。"; } print "\n"; print "\n\n\n\n\n\n"; print "\n
\n"; print "

* [ RESTORE ]のボタンでバックアップ時のログに修復されます。
\n"; print "設定項目でバックアップの選択していればバックアップは自動に行われます。
\n"; print "一度修復されるとバックアップファイルは初期化されます。

\n"; print "
$back_c

\n"; print "
\n
\n"; } &foot; } #---------------------------------------# #----**--- [コメント編集画面] ---**-----# #---------------------------------------# sub edit_html { if ($mo eq "") { if ($FORM{'admin'} eq "") { &error("登録NO が未入力です"); } if ($delkey eq "") { &error("Pass が未入力です"); } $kiji = $FORM{'admin'}; } elsif ($mo == 1) {if ($FORM{'pass'} ne "$pass") { &error("パスワードが違います"); }} open(IN,"$log_f"); @lines = ; close(IN); foreach $line (@lines) { local($number,$date,$name,$email,$subject,$comment,$url,$color,$icon,$resnum,$epasswd,$ip) = split(/<>/,$line); if ($kiji eq "$number") { if ($mo eq "") { if ($epasswd eq "") { &error("この記事はPassの登録がありません"); } &decry($epasswd); if ($match eq "NO") { &error("パスワードが違います"); } $edit_l = "$cgi_f"; } else { $edit_l = "$cgi_f?mode=admin&pass=$FORM{'pass'}"; } $resnum =~ s/\n/0/g; $delkey =~ s/\n//g; if ($FORM{'pass'} eq "") { $FORM{'pass'} = $delkey; } $comment =~ s/
/\n/g; if ($tag_u) { $comment =~ s//>/g; } &head; print ": BACK :\n"; print "
Edit --$number
\n
\n"; print "
\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print "\n\n"; print "\n\n"; print "\n\n"; print "\n\n"; print "\n\n"; print "\n\n"; print "\n"; print "\n\n"; print "\n\n\n"; if ($ic_mode) { print "\n\n\n\n"; } print "\n\n\n\n\n\n\n
Name:
Title:
E-Mail:
URL:
Icon : --INDEX--
Color :"; if ($color eq "") { print "\n"; foreach (1 .. $#colors) { print "\n"; } } else { foreach (0 .. $#colors) { if ($color eq "$colors[$_]") { print "\n"; } else { print "\n"; } } } print "
"; print "\n"; if ($u_reset) { print "\n"; } print "
\n
\n
\n"; &foot; } } } #---------------------------------------# #----**--- [パスワード暗号化] ---**-----# #---------------------------------------# sub encry { srand(); @salts = ('a'..'z','A'..'Z','0'..'9','.','/'); $salt = $salts[int(rand(64))] . $salts[int(rand(64))]; $epasswd = crypt($FORM{'delkey'},$salt); } #---------------------------------------# #-----**--- [パスワード解読] ---**------# #---------------------------------------# sub decry { if ($epasswd =~ /^\$1\$/) { $crptkey = 3; } else { $crptkey = 0; } $match = "NO"; if (crypt($FORM{'delkey'},substr($epasswd,$crptkey,2)) eq $epasswd) { $match = "OK"; } } #---------------------------------------# #----**------- [削除処理] -------**-----# #---------------------------------------# sub l_delete { local(@lines,$line,@NEW); if ($mo eq "") { if ($FORM{'admin'} eq "") { &error("登録NO が 未入力です"); } if ($delkey eq "") { &error("Pass が未入力です"); } } elsif ($mo == 1) { if ($FORM{'pass'} ne "$pass") { &error("パスワードが違います"); } } if (!&lock) { &error("只今、書き込み処理が混み合っています。
しばらく待ってもう一度アクセスしてください。"); } open(IN,"$log_f") || &error("Cannot open $log_f"); @lines = ; close(IN); @NEW = (); $d_flag = 0; foreach $line (@lines) { $line =~ s/\n//g; local($s_number,$s_date,$s_name,$s_email,$s_subject,$s_comment,$s_url,$s_color,$s_icon,$s_resnum,$epasswd,$s_ip) = split(/<>/,$line); $resnum =~ s/\n/0/g; $epasswd =~ s/\n//g; $s_ip =~ s/\n//g; foreach $number (@d_) { if ($number eq "$s_number" || $number eq "$s_resnum") { if ($mo eq "" && $number eq "$s_number") { if ($epasswd eq "") { &error("この記事は 削除Pass が存在しません"); } &decry($epasswd); if ($match eq "NO") { &error("パスワードが違います"); } } $line = ""; } } $n = "\n"; if ($line eq "") { $line = ""; $n = ""; if ($d_flag == 0) { $line = "$s_number<><><><><><><><><>$s_number<><><>"; $n = "\n"; } } $d_flag = 1; push (@NEW,"$line$n"); } open (OUT,">$log_f"); print OUT @NEW; close(OUT); &unlock; if ($mo) { $comp_mess = "

\nCOMPLETED!!"; &admin; } } #---------------------------------------# #------**--- [編集記事置換] ---**-------# #---------------------------------------# sub e_write { if ($mo) { if ($FORM{'pass'} ne "$pass") { &error("パスワードが違います"); } } &wr_check; if (!&lock) { &error("只今、書き込み処理が混み合っています。
しばらく待ってもう一度アクセスしてください。"); } open(IN,"$log_f"); @lines = ; close(IN); @new = (); $flag = 0; foreach $line (@lines) { $line =~ s/\n//g; local($l_number,$l_date,$l_name,$l_email,$l_subject,$l_comment,$l_url,$l_color,$l_icon,$l_resnum,$l_delkey,$l_ip) = split(/<>/,$line); if ($number eq "$l_number") { if ($mo eq "") { $epasswd = $l_delkey; $FORM{'delkey'} = $FORM{'pass'}; &decry($epasswd); if ($match eq "NO") { &error("パスワードが違います"); } } $line = "$number<>$l_date<>$name<>$email<>$subject<>$comment<>$url<>$color<>$icon<>$l_resnum<>$l_delkey<>$l_ip<>"; $flag = 1; } push(@new,"$line\n"); } if ($flag == 0) { &error("編集Passが不正です。"); } if ($flag == 1) { open (OUT,">$log_f"); print OUT @new; close(OUT); } &unlock; if ($mo) { $comp_mess = "

\nCOMPLETED!!"; &admin; } } #---------------------------------------# #------**--- [入力チェック] ---**-------# #---------------------------------------# sub wr_check { if ($FORM{'name'} eq "") { &error("名前が未入力です"); } if ($FORM{'comment'} eq "") { &error("コメントが未入力です"); } ## 文面の中に日本語が含まれているか確認 ------------------- if ($FORM{'comment'} !~ m/(\x81[\x5B|\x60]|\x82[\x9F-\xF2]|\x83[\x40-\x96]){3}/) { &error("コメントが未入力です"); } ## 文面の中にあるリンクの数一定以上なら終了 ------------------- if ($FORM{'comment'} ne ''){ my $urlctn = ($FORM{'comment'} =~ s/http/http/g); if (!$urlctn) { $urlctn = ($FORM{'comment'} =~ s/www\./www\./ig); } if ($urlctn > 6){ &error('投稿制限の対象となっています。ご了承ください。'); } } if (length($delkey) > 8) { &error("削除Passは半角8文字以内です"); } if ($icon eq "randam") { srand; $randam = @icon_r-1; $icon = $icon_r[int(rand($randam))]; } elsif ($icon eq "master") { if ($email ne "$master_m") { &error("Master用アイコンはご使用になれません"); } $icon = $master_i; } } #---------------------------------------# #-------**--- [ロック処理] ---**--------# #---------------------------------------# sub lock { local ($i,$flag,$lock_t); $flag = 0; foreach $i ( 1,2,3,4,5,6) { #**-----flock-----** if ($lock_u == 1) { if (open(LOCK,">$lock_f")) { if (flock(LOCK,6)) { $flag = 1; last ; } } #**-----mkdir-----** } elsif ($lock_u == 2) { if (mkdir($lock_f,0755)) { $flag = 1; last; } elsif ($i == 1) { $lock_t = (stat("$lock_f"))[9]; if ($lock_t < time - 600) { rmdir("$lock_f"); next; } } #**-----ロックなし-----** } else { $flag = 1; last; } sleep(1); } $SIG{'TERM'} = $SIG{'PIPE'} = $SIG{'HUP'} = "sigexit"; $flag; $n_lock = 1; } sub sigexit { if ($lock_u == 2) { rmdir("$lock_f"); exit; } } #---------------------------------------# #-----**--- [アンロック処理] ---**------# #---------------------------------------# sub unlock { if ($lock_u == 1) { close(LOCK); } elsif ($lock_u == 2) { rmdir($lock_f); } } #---------------------------------------# #-------**--- [メール通知] ---**--------# #---------------------------------------# sub mail { $mail_subj = "$b_title の投稿のお知らせです。"; if ($resnum != 0 && $resnum ne "") { $resnums = "(res comment)"; } &jcode'convert(*mail_subj,'jis'); &jcode'convert(*name,'jis'); &jcode'convert(*subject,'jis'); &jcode'convert(*comment,'jis'); &jcode'convert(*date,'jis'); $comment =~ s/
/\n/g; $comment =~ s/<//g; foreach $mailto ($master_m) { if (open(MAIL,"| $s_mail $mailto")) { print MAIL "X-Mailer: MO_HPA MAILER\n"; print MAIL "To: $mailto\n"; if ($email eq "") { $email = "***\@***.***"; } 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 ($subject eq "") { $subject = "No Title"; } print MAIL "Title: $subject $resnums\n\n"; print MAIL "$comment\n\n"; print MAIL "---------------------------------End--\n"; close(MAIL); } } } #---------------------------------------# #------**--- [カウンタ処理] ---**-------# #---------------------------------------# sub counter { if ($lock_u == 1) { open(DATA, "+<$count_f") || &error2("Cannot open $count_f",'0'); flock(DATA, 2); $cnt = ; if ($FORM{'mode'} eq "") { $cnt++; } seek(DATA, 0,0); print DATA "$cnt"; close(DATA); } elsif ($lock_u == 2) { if (!mkdir($cloc_f, 0755)) { exit; } $loc_t = (stat("$cloc_f"))[9]; if ($loc_t < time - 600) { rmdir("$cloc_f"); next; } $SIG{'TERM'} = $SIG{'PIPE'} = $SIG{'HUP'} = "sigexit"; open(DATA,"$count_f") || &error2("Cannot open $count_f",'0'); $cnt = ; close(DATA); if ($FORM{'mode'} eq "") { $cnt++; } open(DATA,">$count_f") || &error2("Cannot write $count_f",'0'); print DATA $cnt; close(DATA); rmdir($cloc_f); } else { open(DATA,"$count_f") || &error2("Cannot open $count_f",'0'); $cnt = ; close(DATA); if ($FORM{'mode'} eq "") { $cnt++; } open(DATA,">$count_f") || &error2("Cannot write $count_f",'0'); print DATA $cnt; close(DATA); } while(length($cnt) < $c_fig) { $cnt = 0 . $cnt; } @cnts = split(//,$cnt); print "\n\n\n\n
\n"; if ($m_wid ne "") { foreach (0 .. $#cnts) { print ""; } } else { print "$cnt"; } print "
\n
\n"; } #---------------------------------------# #----**--- [過去ログファイル] ---**-----# #---------------------------------------# sub plog { open(NO,"$plogc_f") || &error("Cannot open $plogc_f"); $n = ; close(NO); $plog_f = "$plog_dir\/$n\.txt"; unless(-e $plog_f) { &plog_n; } $plog_size = $plog_max * 1024; if (-s $plog_f > $plog_size) { &log_up; } open(OUT,">>$plog_f") || &error("Cannot write $plog_f"); print OUT @log_data; close(OUT); } #---------------------------------------# #-**--- [過去ログカウントアップ] ---**--# #---------------------------------------# sub log_up { $n++; open(NUM,">$plogc_f") || &error("Cannot write $plogc_f"); print NUM "$n"; close(NUM); $plog_f = "$plog_dir\/$n\.txt"; &plog_n; } #---------------------------------------# #--**--- [過去ログファイル生成] ---**---# #---------------------------------------# sub plog_n { open(OUT,">$plog_f") || &error("Cannot write $plog_f"); print OUT ""; close(OUT); chmod(0666,"$plog_f"); } #---------------------------------------# #----**--- [バックアップ処理] ---**-----# #---------------------------------------# sub backup { unless(-e $bup_f) { $plog_f = $bup_f; &plog_n; } open(LOG,">$bup_f") || &error("Cannot write $bup_f"); print LOG @lines; close(LOG); } #---------------------------------------# #------**--- [ログ修復処理] ---**-------# #---------------------------------------# sub restore { if ($n_lock) { &unlock; } rename ($bup_f,$log_f) || &error("Rename Error"); $comp_mess = "

\nCOMPLETED!!"; &admin; } #---------------------------------------# #------**--- [INDEX画像表示] ---**------# #---------------------------------------# sub img { &head; print"
\n
* アイコン一覧 *\n

\n"; print"
\n\n\n\n\n
"; local($i) = 0; foreach (0..$#icon_f) { if ($icon_f[$_] eq "randam" || $icon_f[$_] eq "master") { next; } $i++; print" $icon_n[$_] "; if ($i >= $icon_h) { print"

"; $i = 0; } } print "
\n"; print "
\n\n
\n"; print "
\n
\n"; &foot; }