;
close(DATA);
foreach $line (@lines) {
($pic,$nm,$mail,$http,$body,$dt,$ip,$host,$subject)=split("\t",$line);
$pic =~ s/[^0-9]//gs;
if ($pic ne $access-$lgnumber){ push(@new,$line); }
}
open(DATA,">$targetfile") or &CgiDie("現在、ログファイルが書き込めなくなっています。","しばらくして、もう一度送信してください。");
print DATA @new;
close(DATA);
}
if($title eq "")
{
$title="無題";
}
open(OUT,">>$targetfile") or &CgiDie("現在書き込みができなくなっています。","しばらくして、もう一度送信してください。");
print OUT "$access\t$name\t$email\t$url\t$comment\t$date\t$ENV{'REMOTE_ADDR'}\t$ENV{'REMOTE_HOST'}\t$title\n";
}
else
{
open(OUT,">>$targetfile") or &CgiDie("現在書き込みができなくなっています。","しばらくして、もう一度送信してください。");
print OUT "$FORM{'resno'}\t$name\t$email\t$url\t$comment\t$date\t$ENV{'REMOTE_ADDR'}\t$ENV{'REMOTE_HOST'}\t$title\n";
}
close(OUT);
&process_unlock;
if($FORM{'cook'} eq 'on'){&set_cookie;}
$mode="";
$name="";
$comment="";
$sub="";
$email="";
$url="";
}
#■■■■■■■■■■ コメント投稿画面 ■■■■■■■■■■
sub res_msg {
&get_cookie;
$file=$FORM{'resno'}%$lgnumber;
&head;
if($res_mode eq "new")
{
print "$MESSAGE8
\n";
}
elsif($res_mode eq "comment")
{
$comment =~ s/<//g;
print << "EOH";
$MESSAGE8
EOH
}
else
{
print "$MESSAGE3
\n";
if( -e "$gzfile".$file.".png"==0){
if(-e "$gzfile".$file.".jpg"==0){
print "
";
}else
{
print "
";
}
}else
{
print "
";
}
}
print << "EOH";
EOH
&foot;
exit;
}
#■■■■■■■■■■ ファイルロック処理 ■■■■■■■■■■
sub process_lock {
local($wait) = 10;
while ( !symlink(".",$lock_file) ) {
&CgiDie("lock busy") if --$wait <= 0;
sleep (6);
}
}
#■■■■■■■■■■ ファイルロック処理2 ■■■■■■■■■■
sub process_lock2 {
local($flag) = 0;
foreach (1 .. 5) {
if (-e $lock_file) { sleep(1); }
else {
open(LOCK,">$lock_file")
|| &CgiDie("lock busy");
close(LOCK);
$flag = 1;
last;
}
}
if ($flag == 0) { &CgiDie("lock busy") }
}
#■■■■■■■■■■ ファイルアンロック処理 ■■■■■■■■■■
sub process_unlock {
unlink ($lock_file);
}
#■■■■■■■■■■ ロック状況の監視 ■■■■■■■■■■
sub check_lock {
if ($FORM{'pass'} ne "$pass") {
&CgiError("パスワードが違います","ブラウザのバックボタンで戻って再入力してください。");exit;
}
if($FORM{'operate'} eq "unlock")
{
&process_unlock;
}
else
{
$lock_state="正常";
local($wait) = 4;
while ( !symlink(".",$lock_file) && $wait>0 ) {
$wait--;
if ($wait <= 0){$lock_state="異常";}
sleep (6);
}
if($lock_state eq "正常")
{
&process_unlock;
}
}
&head;
print << "EOH";
EOH
if($FORM{'operate'} eq "unlock")
{
print "ロック解除";
}
else
{
print "現在のファイルロック状況: $lock_state";
if($lock_state eq "異常")
{
print " ";
print "サーバーの負荷が大きくなっているか、その他の原因のためにファイルロックがかかったままになっています。 ";
print "[ファイルロックを管理者権限で解除する]";
}
}
print << "EOH";
|
[掲示板へ戻る]
EOH
&foot;
}
#■■■■■■■■■■ パスワード認証 ■■■■■■■■■■
sub pass {
&head;
print << "EOH";
管理者パスワードを入力してください。
EOH
&foot;
exit;
}
#■■■■■■■■■■ 管理者削除処理 ■■■■■■■■■■
sub del{
if ($FORM{'pass'} ne "$pass") {
&CgiError("パスワードが違います","ブラウザのバックボタンで戻って再入力してください。");exit;
}
if (open(FILE,"<$count_file")) {
$access = ;
close(FILE);
}
@res=();
open(FILE,"<$targetfile");
while(){
chop;
($pic,$name,$mail,$http,$body,$date,$ip,$host,$title)=split("\t",$_);
$title =~ s/\r//g;
$title =~ s/\n//g;
if($pic =~ /[\d]/){
$rank{$pic*100+$res[$pic]}.="$pic\t$name\t$mail\t$http\t$body\t$date\t$ip\t$host\t$title";
$res[$pic]++;
}
}
close(FILE);
@era=();
open(FILE,"<$erasefile");
while(){
$era[$_]=1;
}
close(FILE);
&head;
print << "EOH";
ファイルロック状況のチェック
削除したい項目のチェックボタンをチェックし、”削除実行”を押して下さい。
[掲示板へ戻る]
\n";
print "\n";
&foot;
exit;
}
#■■■■■■■■■■ 一括削除処理 ■■■■■■■■■■
sub master_del{
if ($FORM{'pass'} ne "$pass") {
&CgiError("パスワードが違います","ブラウザのバックボタンで戻って再入力してください。");exit;
}
if ($FORM{'del'} eq "" && $FORM{'del_res'} eq "") {
&CgiError("チェックボタンが選択されていません。","ブラウザのバックボタンで戻って再入力してください。");exit;
}
# ロック処理
if ($lock_mode == 0) { &process_lock; }
elsif ($lock_mode == 1) { &process_lock2; }
if($FORM{'del_res'} ne "")
{
open(DATA,"$targetfile") or &CgiDie("現在、ログファイルが読み込めなくなっています。","しばらくして、もう一度送信してください。");
@lines=;
close(DATA);
foreach $line (@lines) {
$flag=0;
($pic,$name,$mail,$http,$body,$date,$ip,$host,$title)=split("\t",$line);
$title =~ s/\r//g;
$title =~ s/\n//g;
$date =~ s/[^a-zA-Z0-9\/\:]//gs;
foreach $res (@delres) {
if ($date eq $res) {$flag = 1;if($title ne ""){push(@delete,$pic);$FORM{'del'}="del";}}
}
if ($flag == 0) { push(@new,$line); }
}
open(DATA,">$targetfile") or &CgiDie("現在、ログファイルが書き込めなくなっています。","しばらくして、もう一度送信してください。");
print DATA @new;
close(DATA);
}
if($FORM{'del'} ne "")
{
open(OUT,">>$erasefile") or &CgiDie("現在書き込みができなくなっています。",
"しばらくして、もう一度送信してください。");
foreach $pic (@delete) {
$pic =~ s/[^0-9]//gs;
$pic=$pic%$lgnumber;
unlink "$gzfile$pic.gif";####
unlink "$gzfile$pic.jpg";####
unlink "$gzfile$pic.png";####
print OUT "$pic\n";
}
close(OUT);
}
&process_unlock;
&del;
}
#■■■■■■■■■■ URLの自動リンク ■■■■■■■■■■
sub auto_link {
$_[0] =~ s/([^=^\"]|^)(http\:[\w\.\~\-\/\?\&\+\=\:\@\%\;\#]+)/$1$2<\/a>/g;
}
#■■■■■■■■■■ クッキー設定 ■■■■■■■■■■
sub set_cookie {
# クッキーは60日間有効
($secg,$ming,$hourg,$mdayg,$mong,$yearg,$wdayg)
= 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"; }
$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";
print "Set-Cookie: OEBBS=$cook; expires=$date_gmt\n";
}
#■■■■■■■■■■ クッキーを取得 ■■■■■■■■■■
sub get_cookie {
@pairs = split(/\;/, $ENV{'HTTP_COOKIE'});
foreach $pair (@pairs) {
local($name, $value) = split(/\=/, $pair);
$name =~ s/ //g;
$DUMMY{$name} = $value;
}
@pairs = split(/\,/, $DUMMY{'OEBBS'});
foreach $pair (@pairs) {
local($name, $value) = split(/\:/, $pair);
$COOKIE{$name} = $value;
}
$c_name = $COOKIE{'name'};
$c_email = $COOKIE{'email'};
$c_url = $COOKIE{'url'};
if($FORM{'cook'}eq 'on'){
if ($FORM{'name'}) { $c_name = $FORM{'name'}; }
if ($FORM{'email'}) { $c_email = $FORM{'email'}; }
if ($FORM{'url'}) { $c_url = $url; }
}
}
#■■■■■■■■■■ ヘッダー ■■■■■■■■■■
sub head{
print << "EOH";
Content-type: text/html
お絵かき掲示板
EOH
if ($BACKGIF eq '') {
print "
\n";
}
else {
print "
\n";
}
if ($TITLEGIF eq '') {
print "
+ $TITLE +
\n";
}
else {
print "
\n";
}
}
#■■■■■■■■■■ フッター ■■■■■■■■■■
sub foot{
#このリンク部を削除することはできません
print << "EOH";
EOH
exit;
}