#!/usr/bin/perl #↑サーバーの設定に合わせてね #等幅でみてちょ(笑 (重要) #デザイン崩れてても文句いわないでね(^_^;) ############################################################## # # # delete.cgi ver1.69β1 by chiba # # <投稿削除CGI> # # # ############################################################## $ver="1.69β1-902"; $cgi="delete.cgi"; #gzip圧縮送信を使う(管理CGIとかが真っ白に表示されたらこれを0にしてください) #(1=圧縮する、0=圧縮しない) $gzip=0; #gzip圧縮するときのgzipのパス $gzippath='/bin/gzip'; ###########目次########### #(01)目次 #(02)メインルーチン (本筋) #(03)フォームのデコード (&decode) #(04)ヘッダー (&header) #(05)ヘッダー2 (&header2) #(06)フッター (&footer) #(07)スレッド削除確認画面 (&surekakunin) #(09)レス削除確認画面 (&reskakunin) #(10)スレ飛ばし (&suretobasi) #(11)レス削除 (&ressakujo) #(12)スレッド移転 (&sureiten) #(13)スレッドのhtmlのリメイク (&remakehtml) #(14)パス確認 (&pass) #(15)クッキーの書き出し (&set_cookie) #(16)クッキーの取得 (&get_cookie) #(17)ロックファイル(symlonk関数) (&lock1) #(18)ロックファイル(open関数) (&lock2) #(19)自動リンク (&auto_link) #(20)エラー処理 (&error) ################################################## #############☆(02)メインルーチン☆############### ################################################## #config.cgiの読み込み。 open(CONF,"./config.cgi")|| &error("config.cgiが開けません","no"); @conf=; close(CONF); foreach(@conf){tr/\x0D\x0A//d;} ($sitename,$subtitle,$nanashiname,$delmessage,$resusuu,$suresuu,$menusuu,$sureseigen,$hostrec,$wrescheck,$trescheck,$new,$lockkey,$delcheck,$mailing,$mailto,$sendmail,$ng,$ngword,$namecolor,$capcolor,$sagecolor,$titlecolor,$body,$rogo,$table,$table2,$table3,$table4,$table6,$readresbody,$koukoku,$readtitlebody,$itenmessage,$pass,$htmlpath,$htmlzpath,$cgizpath,$kaigyouseigen,$shouryakuseigen,$countzpath,$rogosita,$version,$imode,$ranking,$ipath,$head,$headsuu,$headbody,$headtable,$jst,$meta)=@conf; # jcode.plのパス require './jcode.pl'; &decode; if($FORM{mode2}){ &set_cookie; $location="$cgizpath/megabbs.cgi?board=$board&remake=off"; &pass; } else{&get_cookie;&header2;} if($FORM{mode2} eq "スレッドごと飛ばす"){&suretobasi;} elsif($FORM{mode2} eq "削除"){&ressakujo;} elsif($FORM{mode2} eq "移転"){&sureiten;} elsif($FORM{mode} eq "tobasu"){&surekakunin;} elsif($FORM{mode} eq "sakujo"){&reskakunin;} elsif($FORM{mode} eq "iten"){&itenkakunin;} if($FORM{mode2}){&header;}else{&footer;} exit; ################################################## #############☆(03)フォームのデコード☆########### ################################################## sub decode{ if ($ENV{'REQUEST_METHOD'} eq "POST") { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } else { &error("フォームの投稿方法が間違っています","no"); } @pairs = split(/&/,$buffer); foreach $pair (@pairs) { ($key, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack('H2',$1)/eg; &jcode'convert(*value,'sjis'); if ($value eq 'del') {push(@deleteno,$key ); $del_check=1;} else { $FORM{$key } = $value; } } $board=$FORM{board}; $res=$FORM{res}; $name=$FORM{delname}; $pass=$FORM{delpass}; $delninmessage=$FORM{com}; $delninmessage =~ s/\x0D\x0A/
/g; $delninmessage =~ s/\x0D/
/g; $delninmessage =~ s/\x0A/
/g; &auto_link($delninmessage); # ロックファイル名 @lockfike = ("./lock/$board.lock"); # 一時ファイルを定義 $temp = "$$"; if ($temp eq '') { srand; $temp = 1000000000000000 * rand; } $tmpfile = "$temp" . '.tmp'; # 日時の取得 $ENV{'TZ'} = "JST-9"; ($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime($jst+time); # 日時のフォーマット @week = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); $date = sprintf("%04d/%02d/%02d(%s) %02d:%02d", $year+1900,$mon+1,$mday,$week[$wday],$hour,$min); } ################################################## #################☆(04)ヘッダー☆################# ################################################## sub header{ if($meta eq "はい"){ print "Content-type: text/html\n\n"; print<<"_EOF_"; 自動ページ移動 自動ページ移動中です。
移動しない場合はこの文字列をクリックしてください。
_EOF_ }else{ print "Content-type: text/html\n"; print "Location: $location\n\n"; } } ################################################## #################☆(05)ヘッダー2☆################ ################################################## sub header2{ if($ENV{'HTTP_ACCEPT_ENCODING'}=~/gzip/ && $gzip == 1){ print "Content-type: text/html\n"; print "Content-encoding: gzip\n\n"; open(STDOUT,"| $gzippath -1 -c"); }else{ print "Content-type: text/html\n\n"; } $HEAD=1; print"投稿管理<\/title></head><body>\n"; } ################################################## #################☆(06)フッター☆################# ################################################## sub footer{ print <<"_EOF_"; <br> <p align="right"><a href="http://www.megabbs.com/megabbs/index.html">$cgi ver.$ver<br> (c)megabbs</a></p> </body></html> _EOF_ } ################################################## ###########☆(07)スレッド削除確認画面☆########### ################################################## sub surekakunin{ print <<"_EOF_"; <form action="./delete.cgi" method="post"> <input type=hidden name=board value="$board"> <font size=+1> _EOF_ foreach $delno (@deleteno){ if(!$FORM{res} || $FORM{res} && $FORM{res} eq $delno){ $boardres="${board}_${delno}"; print <<"_EOF_"; <a href="./readres.cgi?bo=$board\&vi=$delno"target="_blank">$boardres</a> <input type=hidden name=$delno value=del> _EOF_ } } print <<"_EOF_"; </font><br> 上記のスレッドを削除しますがよろしいですか?確認してください<br><br> 削除人ネームは公開です。<br> 下記に削除人ネームとパスワードを入れてOKボタンを押して下さい。<br><br> <INPUT TYPE=radio VALUE="tuujou" NAME="kokuchi" CHECKED>通常削除(板に削除告知<br> <INPUT TYPE=radio VALUE="kanzen" NAME="kokuchi">完全削除(板に告知なし <br>タイトルは残す<INPUT TYPE=checkbox VALUE="on" NAME="title"> <table border="1"> <tr><td>あなたの名前</td><td><input type="text" name="delname" value="$COOKIE{delname}"></td></tr> <tr><td>パスワード</td><td><input type="password" name="delpass" value="$COOKIE{delpass}"></td></tr> <tr><td>削除に関してのコメント<br>(通常は”$delmessage”)</td><td><TEXTAREA rows=7 cols=60 name="com">$delmessage</TEXTAREA></td></tr> </table> <input type=submit value="スレッドごと飛ばす" name="mode2"> </form> _EOF_ } ################################################## ############☆(08)レス削除確認画面☆############## ################################################## sub reskakunin{ print <<"_EOF_"; <form action="./delete.cgi" method="post"> <input type=hidden name=board value="$board"> <input type=hidden name=res value="$res"> _EOF_ if($del_check){ foreach $delno (@deleteno){ if($delno ne $res){ $boardresno="${board}_${res}-$delno"; print <<"_EOF_"; <li> <font size=+1><a href="./readres.cgi?bo=$board&vi=$res&rs=$delno&re=$delno&fi=no"target="_blank">$boardresno</a></font> <input type=hidden name=$delno value=del><br> </li> _EOF_ } } } print <<"_EOF_"; 以上のレスを削除しますがよろしいですか?確認してください<br><br> 削除人ネームは公開です。<br> 下記に削除人ネームとパスワードを入れてOKボタンを押して下さい。<br><br> <INPUT TYPE=radio VALUE="tuujou" NAME="kokuchi" CHECKED>通常削除(板に削除告知<br> <INPUT TYPE=radio VALUE="kanzen" NAME="kokuchi">完全削除(板に告知なし <table border="1"> <tr><td>あなたの名前</td><td><input type="text" name="delname" value="$COOKIE{delname}"></td></tr> <tr><td>パスワード</td><td><input type="password" name="delpass" value="$COOKIE{delpass}"></td></tr> <tr><td>削除に関してのコメント<br>(通常は”$delmessage”)</td><td><TEXTAREA rows=7 cols=60 name="com">$delmessage</TEXTAREA></td></tr> </table> <input type=submit value="削除" name="mode2"> </form> _EOF_ } ################################################## #############☆(09)スレッド移転確認画面☆######### ################################################## sub itenkakunin{ print <<"_EOF_"; <form action="./delete.cgi" method="post"> <input type=hidden name=board value="$board"> <font size=+1> _EOF_ foreach $delno (@deleteno){ if(!$FORM{res} || $FORM{res} && $FORM{res} eq $delno){ $boardres="${board}_${delno}"; print <<"_EOF_"; <a href="./readres.cgi?bo=$board\&vi=$delno"target="_blank">$boardres</a> <input type=hidden name=$delno value=del> _EOF_ } } print <<"_EOF_"; </font><br>バグフィックス済み。<br> 上記のスレッドを移転しますがよろしいですか?確認してください<br><br> 削除人ネームは公開です。<br> 下記に削除人ネームとパスワードを入れてOKボタンを押して下さい。<br><br> <b>移転場所</b><br> <INPUT TYPE=radio VALUE="igai" NAME="ita" CHECKED>板を選択 <SELECT name="toboard" > _EOF_ open(BOARD,"./board.txt"); while(<BOARD>){ ($toboard,$bbstitle,$oekakiyes)=split(/<>/); if($board ne $toboard){ print <<"_EOF_"; <OPTION value="$toboard">$bbstitle _EOF_ } } close(BOARD); print <<"_EOF_"; </SELECT><br> <INPUT TYPE=radio VALUE="gomi" NAME="ita" >ゴミ箱<br> <b>移転場所</b><br> <INPUT TYPE=radio VALUE="tuujou" NAME="kokuchi" CHECKED>通常移転(元板に移転告知<br> <INPUT TYPE=radio VALUE="kanzen" NAME="kokuchi">完全移転(元板に告知なし <br>タイトルは残す<INPUT TYPE=checkbox VALUE="on" NAME="title"> <table border="1"> <tr><td>あなたの名前</td><td><input type="text" name="delname" value="$COOKIE{delname}"></td></tr> <tr><td>パスワード</td><td><input type="password" name="delpass" value="$COOKIE{delpass}"></td></tr> <tr><td>移転に関してのコメント<br>(通常は”$itenmessage”)</td><td><TEXTAREA rows=7 cols=60 name="com">$itenmessage</TEXTAREA></td></tr> </table> <input type=submit value="移転" name="mode2"> </form> _EOF_ } ################################################## ##############☆(10)スレ飛ばし☆################## ################################################## sub suretobasi{ # ロック処理 if ($lockkey eq 'symlink') { &lock1; } elsif ($lockkey eq 'open') { &lock2; } foreach $res (@deleteno){ $sureapath="$htmlpath/$board/txt/${board}_${res}a.txt"; $rsureapath="./dellist/${board}_${res}as.txt"; $ksureapath="./dellist/${board}_${res}ak.txt"; $surebpath="$htmlpath/$board/txt/${board}_${res}b.txt"; $rsurebpath="./dellist/${board}_${res}bs.txt"; $ksurebpath="./dellist/${board}_${res}bk.txt"; $htmlbpatha="$htmlpath/$board/html/${board}_$res.html"; $lognewfile="$htmlpath/$board/${board}_newb.txt"; open(SUREA,"$sureapath"); ($ptitle,$alldel,$oekakino)=(split(/<>/,<SUREA>))[2,6,7]; close(SUREA); chomp($alldel); if($alldel eq "alldel" && $FORM{kokuchi} ne "kanzen"){&error("このスレッドは既に移転もしくは削除されています。完全削除しかできません。","lock");} #リストに書き込む open(LIST,">>./del.lst"); print LIST "$board<>$res<>0<>$date<>$name<>$delninmessage<>suredel<>$ptitle<>$FORM{kokuchi}<>$FORM{title}<>$oekakino<>\n"; close(LIST); #log修正 $title=$delmessage; if($FORM{kokuchi} eq tuujou){ open(LOCK,"$lockfile[0]"); eval{flock(LOCK,2);}; if($FORM{title} eq "on"){ $title=$ptitle; } rename($sureapath,$rsureapath) || system("mv", $sureapath, $rsureapath) || &error("Rename Error","lock"); open(LOG,">$sureapath")|| &error("$sureapathが開けません","lock"); eval{flock(LOG,2);}; print LOG "$delmessage<>$name<>$title<>$delninmessage<>1<>$delmessage<>alldel\n"; close(LOG); open(HTML,">$htmlbpatha"); print HTML <<"_EOF_"; <DT><a href="$cgizpath/readres.cgi?bo=$FORM{bo}&vi=$loge&rs=1&re=1&fi=no" target="_new">1</a><FONT color="#005050"><B>  <a href="mailto:$delmessage">$name</a></B></FONT>  $delmessage<br> <DD>$deninlmessage <hr> _EOF_ close(HTML); close(LOCK); rename($surebpath,$rsurebpath) || system("mv", $surebpath, $rsurebpath) || &error("Rename Error","lock"); } elsif($FORM{kokuchi} eq kanzen){ rename($sureapath,$ksureapath) || system("mv", $sureapath, $ksureapath) || &error("Rename Error","lock"); rename($surebpath,$ksurebpath) || system("mv", $surebpath, $ksurebpath) || &error("Rename Error","lock"); unlink("$htmlbpatha"); } #newb修正 open(LOCK,"$lockfile[0]"); eval{flock(LOCK,2);}; open(NEW,"$lognewfile")|| &error("$lognewfileが開けません","lock"); eval{flock(NEW,1);}; open(TMP,">$tmpfile") || &error("$tmpfileが開けません","lock"); while (<NEW>) { ($fres,$ftitle)=(split(/<>/,$_))[0,1]; if($fres == $res && $ftitle ne ""){ if($FORM{kokuchi} eq "tuujou"){print TMP "$res<>$delmessage<>1\n";} last; } else{print TMP "$_";} } while (<NEW>){print TMP "$_";} close(NEW); close(TMP); rename($tmpfile,$lognewfile)|| system("mv", $tmpfile, $lognewfile) || &error("Rename Error","lock"); close(LOCK); if($FORM{kokuchi} eq "tuujou"){&remakehtml;} #new.txt修正 open(LOCK,"$lockfile[0]"); eval{flock(LOCK,2);}; open(NEW,"$htmlpath/new.txt"); eval{flock(NEW,1);}; open(TMP,">$tmpfile") || &error("$tmpfileが開けません","lock"); while (<NEW>) { ($fboard,$fres)=(split(/<>/,$_))[0,1]; if($fboard eq "$board" && $fres == $res){ if($FORM{kokuchi} eq "tuujou"){print TMP "$board<>$res<>$delmessage<>1\n";} last; } else{print TMP "$_";} } while (<NEW>){print TMP "$_";} close(NEW); close(TMP); rename($tmpfile,"$htmlpath/new.txt")|| system("mv", $tmpfile,"$htmlpath/new.txt") || &error("Rename Error","lock"); close(LOCK); chmod (0600,"$rsureapath"); chmod (0600,"$rsurebpath"); } # ロック解除 foreach $lockfiles (@lockfile){ if (-e "$lockfiles") { unlink($lockfiles); } } } ################################################## ################☆(11)レス削除☆################## ################################################## sub ressakujo{ unless($del_check){&error("レスを選択してません","no");} # ロック処理 if ($lockkey eq 'symlink') { &lock1; } elsif ($lockkey eq 'open') { &lock2; } $sureapath="$htmlpath/$board/txt/${board}_${res}a.txt"; $rsureapath="./dellist/${board}_${res}a.txt"; $surebpath="$htmlpath/$board/txt/${board}_${res}b.txt"; $rsurebpath="./dellist/${board}_${res}b.txt"; $lognewfile="$htmlpath/$board/${board}_newb.txt"; open(LOG,"$sureapath")|| &error("$sureapathが開けません","lock"); eval{flock(LOG,1);}; ($title,$delmes,$oekakino)=(split(/<>/,<LOG>))[2,6,7]; close(LOG); foreach $resnomber(@deleteno){ ##loga修正 if($resnomber eq "1"){ if($FORM{kokuchi} eq "kanzen"){&error("レス1の完全削除は仕様上ムリです。告知してください。","lock");} if($delmes=~/alldel/ && $FORM{kokuchi} eq "tuujou"){&error("このスレは既に削除or移転されています完全削除しかできません。","lock");} #リストに書き込む open(LIST,">>./del.lst"); print LIST "$board<>$res<>$resnomber<>$date<>$name<>$delninmessage<>resudel<>$title<>$oekakino<>$FORM{kokuchi}<>\n"; close(LIST); rename($sureapath,$rsureapath)|| system("mv", $sureapath, $rsureapath) || &error("Rename Error","lock"); open(LOG,">$sureapath")|| &error("$sureapathが開けません","lock"); print LOG "$delmessage<>$name<>$title<>$delninmessage<>1<>$delmessage<>del<>\n"; close(LOG); } else{ ##logb修正 open(TMP,">$tmpfile")|| &error("$tmpfileが開けません","lock"); open(RSURE,">>$rsurebpath")|| &error("$rsurebpathが開けません","lock"); #リストに書き込む open(LIST,">>./del.lst"); print LIST "$board<>$res<>$resnomber<>$date<>$name<>$delninmessage<>resudel<>$title<>$oekakino<>$FORM{kokuchi}<>\n"; close(LIST); open(LOG,"$surebpath"); while (<LOG>){ ($comno,$delmes)=(split /<>/)[3,5]; if($resnomber eq $comno && $delmes ne "del" && $FORM{kokuchi} eq "tuujou"){print RSURE "$_";print TMP "$delmessage<>$name<>$delninmessage<>$resnomber<>$delmessage<>del<>\n";last;} elsif($resnomber eq $comno && $delmes ne "del" && $FORM{kokuchi} eq "kanzen"){print RSURE "$_";print TMP "$delmessage<>$name<>$delninmessage<>$resnomber<>$delmessage<>toumeidel<>\n";last;} else{print TMP "$_";} } close(RSURE); while(<LOG>){print TMP "$_";} close(LOG); close(TMP); rename($tmpfile,$surebpath)|| system("mv", $tmpfile, $surebpath) || &error("Rename Error","lock"); } } &remakehtml; chmod (0600,"$rsureapath"); chmod (0600,"$rsurebpath"); # ロック解除 foreach $lockfiles (@lockfile){ if (-e "$lockfiles") { unlink($lockfiles); } } } ################################################## ###############☆(12)スレッド移転☆############### ################################################## sub sureiten{ if($FORM{ita} eq "gomi"){$toboard="gomi";} else{$toboard=$FORM{toboard};} unless(-e "./board/$toboard.txt"){&error("そんな板はないです作ってから移転してください","no");} push(@lockfile,"./lock/$toboard.lock"); # ロック処理1 if ($lockkey eq 'symlink') { &lock1; } elsif ($lockkey eq 'open') { &lock2; } foreach $res (@deleteno){ $time=time; $sureapath="$htmlpath/$board/txt/${board}_${res}a.txt"; $surebpath="$htmlpath/$board/txt/${board}_${res}b.txt"; $htmlbpatha="$htmlpath/$board/html/${board}_$res.html"; $lognewfile="$htmlpath/$board/${board}_newb.txt"; $tolognewfile="$htmlpath/$toboard/${toboard}_newb.txt"; $title=$itenmessage; open(LOG,"$sureapath")|| &error("$sureapathが開けません。","lock"); ($ptitle,$delmes,$oekakino)=(split(/<>/,<LOG>))[2,6,7]; close(LOG); if($delmes=~/del/){&error("このスレッドは既に移転もしくは削除されています","lock");} if($FORM{title} eq on){$title=$ptitle;} while(-e "$htmlpath/$toboard/txt/${toboard}_${time}a.txt"){$time++;} open(LIST,">>./del.lst"); print LIST "$board<>$res<>0<>$date<>$name<>$delninmessage<>sureiten<>$ptitle<>$toboard<>$time<>$FORM{kokuchi}<>$FORM{title}\n"; close(LIST); open MOTO,"$sureapath"; $moto=<MOTO>; close MOTO; unlink "$sureapath"; # 169系(1.68と1.69)の初期車での1氏ねバグを修正 $moto=~s/$oekakino/$time/g if($oekakino); $moto=~s/$board/$toboard/g; open ATO,">$htmlpath/$toboard/txt/${toboard}_${time}a.txt"; print ATO $moto; close ATO; rename($surebpath,"$htmlpath/$toboard/txt/${toboard}_${time}b.txt") || system("mv", $surebpath, "$htmlpath/$toboard/txt/${toboard}_${time}b.txt")==0 || &error("Rename Error","lock"); open MOTO,"$htmlbpatha"; open ATO,">$htmlpath/$toboard/html/${toboard}_${time}.html"; while(<MOTO>){s/$board\/png\/$oekakino\.png/$toboard\/png\/$time\.png/g;print ATO;} close ATO; close MOTO; unlink "$htmlbpatha"; rename ("$htmlpath/$board/png/$oekakino.png","$htmlpath/$toboard/png/$time.png"); open(TMP,">$tmpfile")|| &error("$tmpfileが開けません。","lock"); open(LOG,"$lognewfile")|| &error("$lognewfileが開けません。","lock"); eval{flock(LOG,1);}; while(<LOG>){ tr/\n//d; if(/^$res<>.+<>(.+)$/){ if($FORM{kokuchi} eq "tuujou"){print TMP "$res<>$title<>1\n";} $ressuu=$1; last; } else{print TMP "$_\n";} } while(<LOG>){print TMP "$_";} close(TMP); close(LOG); rename($tmpfile,$lognewfile)|| system("mv", $tmpfile, $lognewfile) || &error("Rename Error","lock"); open(TMP,">$tmpfile")|| &error("$tmpfileが開けません。","lock"); open(NEW,"$tolognewfile")|| &error("$tolognewfileが開けません。","lock"); print TMP "$time\n$time<>$ptitle<>$ressuu\n"; while(<NEW>){ if(/<>/){print TMP "$_";} } close(NEW); print TMP "$time\n"; close(TMP); rename($tmpfile,$tolognewfile)|| system("mv", $tmpfile, $tolognewfile) || &error("Rename Error","lock"); if($FORM{kokuchi} eq tuujou){ open(LOG,">$sureapath")|| &error("$sureapathが開けません。","lock"); print LOG "$itenmessage<>$name<>$title<>$delninmessage<br><a href\=\"$cgizpath\/readres.cgi\?bo\=$toboard\&vi\=$time\"target\=\"_blank\">こちら<\/a><>1<>$itenmessage<>alldel\n"; close(LOG); &remakehtml; } #new.txt修正 open(LOCK,"$lockfile[0]"); eval{flock(LOCK,2);}; open(NEW,"$htmlpath/new.txt"); eval{flock(NEW,1);}; open(TMP,">$tmpfile") || &error("$tmpfileが開けません","lock"); while (<NEW>) { ($fboard,$fres)=(split(/<>/,$_))[0,1]; if($fboard eq $board && $fres == $res){ if($FORM{kokuchi} eq "tuujou"){print TMP "$board<>$res<>$title<>1\n";} last; } else{print TMP "$_";} } while (<NEW>){print TMP "$_";} close(NEW); close(TMP); rename($tmpfile,"$htmlpath/new.txt")|| system("mv", $tmpfile,"$htmlpath/new.txt") || &error("Rename Error","lock"); close(LOCK); } # ロック解除 foreach $lockfiles (@lockfile){ if (-e "$lockfiles") { unlink($lockfiles); } } } ################################################## ##########☆(13)スレッドのhtmlのリメイク☆######## ################################################## sub remakehtml{ $ahtml="$htmlpath/$board/html/${board}_${res}.html"; $a1stfile="$htmlpath/$board/txt/${board}_${res}a.txt"; $b1stfile="$htmlpath/$board/txt/${board}_${res}b.txt"; $article="${board}_${res}"; open(LOG,$a1stfile); ($date,$name,$sub,$msg,$no,$email,$delmes) = split(/<>/,<LOG>); close(LOG); $email=~tr/\x0D\x0A//d; if ($email ne "") {$name = "<a href=\"mailto\:$email\">$name</a>";} if($namecolor){$fontname="<FONT color=$namecolor><B>  $name</B></FONT>";} else{$fontname="<B>  $name</B>";} open(HTM,">$ahtml"); eval{flock(HTM,2);}; if($delcheck eq "all" && $delmes!~/del/){$checkbox="\<input type=checkbox name=1 value=del\>";} else{$checkbox="";} print HTM<<"EOF"; <DT><a href="$cgizpath/readres.cgi?bo=$board&vi=$res&res=1" target="_blank">1</a>$fontname  $date$checkbox<BR> <DD>$msg <hr size=5> EOF open(LOG,$b1stfile); while(read LOG, $_, 1024) { $resukazu += tr/\n//; } seek(LOG,0,0); my($count)=0; if(($resukazu-1) < $resusuu){$printing=0;} else{$printing = $resukazu - $resusuu;} while(<LOG>){ $count++; if($count > $printing){ tr/\x0D\x0A//d; ($dater,$namer,$msg,$nor,$emailr,$delmes,$shouryakuyes) = split /<>/; if($delmes eq "toumeidel"){next;} $printres=$count+1; $shouryaku=""; if($shouryakuyes=~/yes/){ @msg=split(/<BR>/,$msg); $msg=""; for(0..$shouryakuseigen){ $msg.="$msg[$_]<BR>"; } $shouryaku=<<"_EOF_"; <br> <a href="$cgizpath/readres.cgi?bo=$board&vi=$res&res=$printres" target="_blank"> 省略されました全文を見る </a> _EOF_ if($shouryakuyes=~/pre/){$shouryaku="</pre>$shouryaku";} if($shouryakuyes=~/tt/){$shouryaku="</tt>$shouryaku";} } if ($emailr ne "") {$namer = "<a href=\"mailto\:$emailr\">$namer</a>";} if($namecolor){$fontname="<FONT color=$namecolor><B>  $namer</B></FONT>";} else{$fontname="<B>  $namer</B>";} if($delcheck eq "all" && $delmes ne "del"){$checkbox="\<input type=checkbox name=\"$printres\" value=del\>";} else{$checkbox="";} print HTM<<"EOF"; <DT> <a href="$cgizpath/readres.cgi?bo=$board&vi=$res&res=$printres" target="_blank"> $printres</a>$fontname  $dater$checkbox<BR> <DD>$msg$shouryaku <hr> EOF }} close(LOG); close(HTM); } ################################################## ################☆(14)パス確認☆################## ################################################## sub pass { $delpath="./del/$pass.cgi"; open(PAS,"$delpath") || &error("パスワードもしくは名前が間違っています","no"); ($delname,$target)=split/<>/,<PAS>; close(PAS); if($target ne "all"){foreach(split/\,/,$target){if($FORM{board} eq "$_"){$passcheck=1;}}} else{$passcheck=1;} $delname=~tr/\x0D\x0A//d; if($delname ne $name){&error("パスワードもしくは名前が間違っています","no"); } if(!$passcheck){&error("あなたはこの掲示板の削除権限をみとめられていません","no");} } ################################################## #############☆(15)クッキーの書き出し☆########### ################################################## sub set_cookie { $ENV{'TZ'} = "GMT"; # 国際標準時を取得 ($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg,$ydayg,$isdstg)=localtime(time+30*24*60*60); $ENV{'TZ'} = "Japan"; $date_gmt =sprintf("%s,%02d-%s-%4d %02d:%02d:%02d GMT",('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday')[$wdayg],$mdayg,('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mong],$yearg+1900,$hourg,$ming,$secg); print "Set-Cookie: delname=$name; expires=$date_gmt; path=/\n"; print "Set-Cookie: delpass=$pass; expires=$date_gmt; path=/\n"; } ################################################## #############☆(16)クッキーの取得☆############### ################################################## sub get_cookie { local($xx, $name, $value); for $xx (split(/; */, $ENV{'HTTP_COOKIE'})) { ($name, $value) = split(/=/, $xx); $COOKIE{$name} = $value; } } ################################################## #####☆(17)ロックファイル(symlink関数)☆######## ################################################## sub lock1 { foreach $lockfiles (@lockfile){ local($retry) = 5; while (!symlink(".",$lockfiles)) { if (--$retry <= 0) { &error("LOCK is BUSY","lock"); } sleep(1); } } } ################################################## #####☆(18)ロックファイル(open関数)☆########### ################################################## sub lock2 { foreach $lockfiles (@lockfile){ local($flag) = 0; foreach (1 .. 5) { if (-e $lockfiles) { sleep(1); } else { open(LOCK,">$lockfiles") || &error("Write Error : $lockfiles","lock"); close(LOCK); $flag = 1; last; } } if ($flag == 0) { &error("LOCK is BUSY","lock"); } } } ################################################## ##############☆(19)自動リンク☆################## ################################################## sub auto_link { $_[0] =~ s/(https?|ftp|gopher|telnet|whois|news):\/\/([\w|\!\#\$\%\&\'\(\)\=\-\^\`\\\|\@\~\[\{\]\}\;\+\:\*\,\.\?\/]+)/<a href=\"$1:\/\/$2\"target=\"_blank\">$1:\/\/$2<\/a>/g; $_[0] =~ s/([\w|\!\#\$\%\'\=\-\^\`\\\|\~\[\{\]\}\+\*\.\?\/]+)\@([\w|\!\#\$\%\'\(\)\=\-\^\`\\\|\~\[\{\]\}\+\*\.\?\/]+)/<a href="mailto:$1\@$2">$1\@$2<\/a>/g; } ################################################## ###############☆(20)エラー処理☆################# ################################################## sub error { if ($_[1] eq "lock"){foreach $lockfiles (@lockfile){if( -e $lockfiles){ unlink($lockfiles); }}} if (-e $tmpfile) { unlink($tmpfile); } if ($HEAD eq "") { print "Content-type: text/html\n\n";} print <<"_EOF_"; <center><font size="4" color="red">エラー</font> <hr width="60%" size="0" noshade color=red> $_[0]<center> </body></html> _EOF_ exit; } ######################################################### ####################------終了-------#################### ######################################################### exit;