bbs.cgi再開発プロジェクト 3
■ このスレッドは過去ログ倉庫に格納されています
(1) bbs.cgi の序盤 unless( -w $DATAFILE){ DispError("ERROR!","ERROR:このスレッドには書き込めません。"); } unless( -s $DATAFILE <= 512000){ DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!"); } (2) bbs.cgi の中盤の最後 (datへの追記) if (open(OUT, "+>>$DATAFILE")) { my @logdat = <OUT>; my $lognum = @logdat; ++$lognum; if($lognum > 1000) { close(OUT); DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"); } print OUT "$outdat\n"; if($lognum > 999) { print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; close(OUT); chmod(0555, $DATAFILE); } else { close(OUT); } } (3) bbs.cgi の終盤の始め #================================================== # ファイル操作(subject.txt & subback.html) #================================================== { #サブジェクトパスを作成 my $rnd = int(rand(99999)); my $subject = $PATH . "subject.txt"; my $subtemp = $PATH . $rnd . $FORM{'time'} . ".tmp"; my $keyfile = $FORM{'key'} . ".dat"; use vars qw($FILENUM); use vars qw($SUBLINE); use vars qw(@newsub); #サブジェクトファイルを読み込む unless(-e "$subject"){ makesub(); } open(SUBR,"<$subject");#SUBJECTを開く my @SUBJECTLIST = <SUBR>;#内容を全て読み込む close(SUBR);#閉じる $FILENUM = @SUBJECTLIST; MakeWorkFile($FORM{'key'}); if($FORM{'subject'} ne ""){ #subjectがあれば新規スレッド my $subtm = "$keyfile<>$FORM{'subject'} (1)\n"; @newsub = ($subtm, @SUBJECTLIST); ++$FILENUM; }else{ my (@tempsub, $transub, $frontsub, $rearsub); if($FORM{'mail'} =~ /sage/){ $transub = join('<<>>', @SUBJECTLIST);#一本につなげる ($frontsub, $rearsub) = split(/$keyfile<>/, $transub);#keyでぶったぎる @tempsub = split(/<<>>/, $rearsub);#後半ぶつ切り $transub = shift(@tempsub);#タイトルを取り出す $transub = $keyfile . "<>" . $SUBLINE;#タイトル入れ替え @newsub = (split(/<<>>/, $frontsub), $transub, @tempsub); }else{ $transub = $keyfile . "<>" . $SUBLINE; @newsub = ($transub, grep(!/^$FORM{'key'}/, @SUBJECTLIST)); } } if(@newsub){ #SUBJECTに書き込む open(SUBT, ">$subtemp"); #flock(SUBT, 2); foreach(@newsub){ print SUBT $_; } #flock(SUBT,8); close(SUBT); my $resuc = 0; until($resuc){ $resuc = rename($subtemp, $subject); } }else{ @newsub = @SUBJECTLIST; } } 関連するサブルーチンに makesub(); MakeWorkFile($FORM{'key'}); この二つがある #================================================== # subject.txtの補完 #================================================== sub makesub{ my $bbs = $FORM{'bbs'}; my $path = "../"."$bbs"; #$where{$bbs}; my $datpath = $path."/dat"; open(DIR, "ls $datpath/|") || print HTM " cant' ls."; my @dir = <DIR>; close(DIR); my %time; my @pagefile; foreach(@dir){ chop(); my $mtime; my $pagemax; my $mt = "$mtime"."$_"; ($mtime) = (stat("$datpath/$_"))[10]; $time{"$mt"} = $_; ++$pagemax; } my @mtime = keys(%time); my @sorting = sort by_number @mtime; my $filenum; foreach(@sorting){ push(@pagefile,$time{"$_"}); #print $time{"$_"}; ++$filenum; } #@pagefile = reverse(@pagefile); my $num; my $subject; while($filenum>=$num){ my $showpage = @pagefile[$num]; if($showpage eq ""){ } open(IN, "$datpath/$showpage")||die ""; my $resnum = 1; my $rr = 0; while(<IN>){ $resnum++; if($rr == 0){ $_ =~ s/\n//gi; $_ =~ s/\r//gi; my ($name,$mail,$time,$message,$subject); ($name,$mail,$time,$message,$subject) = split(/,/,$_); $rr = 1; } } close(IN); open(OUT,">$path/subject.txt"); print OUT $showpage .","; print OUT "$subject($resnum)\n"; ++$num; close(OUT); } } #================================================== # ファイル操作(HTML作成用作業ファイル更新) #================================================== #HTML用DATを作成 #MakeWorkFile(KEY-NUMBER) sub MakeWorkFile{ my $key = @_[0]; my $workfile = $TEMPPATH . $key . ".html"; my $dattemp = $DATPATH . $key . ".dat"; my (@messx,@content,@logdat); my ($lognum,$mailto,$time,$brmax,$topnum,$firstlog,$name,$mail,$subject,$message); open(RDAT,"<$dattemp"); @logdat=<RDAT>;#ログを配列に読み込む close(RDAT); #ログのカキコ数を取得 $lognum = @logdat; if(-w $dattemp && $lognum > 999){ #open(OVER, ">>$dattemp"); #print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; #close(OVER); #chmod(0555, $dattemp); $lognum++; if(-w $dattemp){ my $datdat = $DATPATH . $key; my $tmpdat = $DATPATH . $key . ".tmp"; my $success; open(COPY, "cp $dattemp $datdat |"); close(COPY); $success = 0; until($success){ $success = rename($datdat, $dattemp); } chmod(0555, $dattemp); unlink($tmpdat); } } #1つ目の要素を読み込む $firstlog = $logdat[0]; #改行カット chomp($firstlog); #1つ目の要素を加工する ($name,$mail,$time,$message,$subject) = split(/<>/,$firstlog); $SUBLINE = $subject . " (" . $lognum . ")\n"; open(SHTM,">$workfile");#ログテンポラリを開く #flock(SHTM,2); #サブジェクトテーブルを吐き出す(ここは必ず1行にまとめること(処理効率)) #----------------------------------------------------------------------- print SHTM <<EOF; <TABLE border=1 cellspacing=7 cellpadding=3 width=95% bgcolor="$SETTING{"BBS_THREAD_COLOR"}" align=center><TR><TD><DL><a name="\$ANCOR"></a><DIV ALIGN="right"><a href ="#menu">■</a><a href="#\$FRONT">▲</a><a href="#\$NEXT">▼</a></DIV><B>【\$ANCOR:$lognum】<FONT size=5 color="$SETTING{'BBS_SUBJECT_COLOR'}">$subject</FONT></B> EOF #----------------------------------------------------------------------- #1つ目のメールへのリンクを作成 if($ENV{'SERVER_NAME'} =~ /bbspink\.com/i) {#if(bbspink) unless($message =~ /2ch\.net/ || $message =~ /bbspink\.com/){ $message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/pinktower\.com\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig; }else{ $message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig; } } else {#if(!bbspink) unless($message =~ /2ch\.net/ || $message =~ /bbspink\.com/){ $message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/ime\.st\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig; }else{ $message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig; } }### if($mail ne ""){ $mailto = "<a href=\"mailto:$mail \"><b>$name </b></a>"; }else{ $mailto = "<font color=$SETTING{'BBS_NAME_COLOR'}><b>$name </b></font>"; } #1つ目の要素を吐き出す print SHTM "<dt>1 名前:$mailto $time<dd>$message <br><br><br>"; #ログ数から、表示コンテンツをチェック if($lognum > $SETTING{"BBS_CONTENTS_NUMBER"}){ #ケツの要素を0〜9番までコンテンツに格納 @content[0..$SETTING{"BBS_CONTENTS_NUMBER"}-1] = @logdat[@logdat-$SETTING{"BBS_CONTENTS_NUMBER"}..@logdat-1]; $topnum=@logdat-($SETTING{"BBS_CONTENTS_NUMBER"}-1); }else{ #アタマの要素を1〜10番までコンテンツに格納 @content[0..($SETTING{"BBS_CONTENTS_NUMBER"}-1)] = @logdat[1..$SETTING{"BBS_CONTENTS_NUMBER"}]; $topnum=2; } foreach(@content){ chomp($_);#改行をカット #要素を加工する ($name,$mail,$time,$message,$subject) = split(/<>/,$_); unless($_){ $topnum++; next; } #要素のメールへのリンクを作成 if($ENV{'SERVER_NAME'} =~ /bbspink\.com/i) {#if(bbspink) #if(bbspink) unless($message =~ /2ch\.net/ || $message =~ /bbspink\.com/){ $message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/pinktower\.com\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig; }else{ $message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig; } }else {#if(!bbspink) unless($message =~ /2ch\.net/ || $message =~ /bbspink\.com/){ $message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/ime\.st\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig; }else{ $message =~ s/(https?|ftp|gopher|telnet|whois|news)\:\/\/([\w|\:\!\#\$\%\=\&\-\^\`\\\|\@\~\[\{\]\}\;\+\*\,\.\?\/]+)/<a href=\"http\:\/\/$2\" target=\"_blank\">$1\:\/\/$2<\/a>/ig; } } ## if($mail ne ""){ $mailto = "<a href=\"mailto:$mail \"><b>$name </b></a>"; }else{ $mailto = "<font color=$SETTING{'BBS_NAME_COLOR'}><b>$name </b></font>"; } print SHTM "<dt>$topnum 名前:$mailto :$time<dd>"; my @messx = split(/<br>/,$message);#メッセージを行でカット my $messy = @messx;#行数を計算 if($messy > $SETTING{"BBS_LINE_NUMBER"}){ my $messz = join('<br>',@messx[0 .. $SETTING{'BBS_LINE_NUMBER'}-1]); print SHTM "$messz <br>"; print SHTM "<font color=\"$SETTING{'BBS_NAME_COLOR'}\">(省略されました・・全てを読むには<a href=\"../test/read.cgi/$FORM{'bbs'}/$key/$topnum\" target=\"_blank\">ここ</a>を押してください)</font><br>"; }else{ my $messz = join('<br>',@messx[0 .. $messy-1]); print SHTM "$messz <br>"; } $topnum++; print SHTM "<br>\n"; } #----------------------------------------------------------------------- #flock(SHTM,8); close(SHTM); #パーミッション調整 umask(0); chmod(0666,$workfile); } >>325 -w $DATAFILE or ( -s $DATAFILE <= 512 * 1024) or DispError("ERROR!","ERROR:このスレッドには書き込めません。"); エラーの単純化っでどうかしら?理由はどうあれ書き込めないのですから(^-^) chmodはされているのにOver1000がprintされていない、、、? そういえば、gethostbyaddr を二回やってるのはどうなんだろう。。。 >>331 追記および訂正。 our $Log_line = 1; # グローバル扱いで。以後レス数はこれを参照するとか。 if (open(OUT, "+>>$DATAFILE")) { $Log_line = join '', <OUT> =~ tr/\n/\n/ } -w $DATAFILE or ( -s $DATAFILE <= 512 * 1024) or ($Log_line > 1000) or DispError("ERROR!","ERROR:このスレッドには書き込めません。"); if (open(OUT, "+>>$DATAFILE")) { my @logdat = <OUT>; my $lognum = @logdat; if($lognum > 1000) { close(OUT); DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"); } print OUT "$outdat\n"; ++$lognum; if($lognum > 1000) { print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; close(OUT); chmod(0555, $DATAFILE); } else { close(OUT); } } >>334 条件が無茶苦茶ですね。ごめんなさい。 (-w $DATAFILE and ( -s $DATAFILE <= 512 * 1024) and ($Log_line < 1001)) or DispError("ERROR!","ERROR:このスレッドには書き込めません。"); >>335 むしろそうするくらいなら、 ++$lognum; を削除 だけで済むような。 質問。subject.txtに記録されるレス数は >>326 の $lognum ですか? >>339 うん。今そのことについて議論してるところかと。 >340 漏れも多分そうだと思って一応++$lognum;は残しておいてもた if($lognum > 1010) { close(OUT); DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"); } にしてみた。 というか、datの書き込みのあとには、 #パーミッション調整 umask(0); chmod(0666, $DATAFILE); がきてますよー。 if($lognum > 1000) { ++$lognum; #←これもいるかも print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; close(OUT); chmod(0555, $DATAFILE); } ただ、>>344 みたいなアプローチがどのぐらい効果あるかだけど、、、。 それで、1001ストッパーが書かれるような気は、あんまりしないかも。 ちょっとお出かけ。 #MakeWorkFile(KEY-NUMBER) sub MakeWorkFile{ my $key = @_[0]; my $workfile = $TEMPPATH . $key . ".html"; my $dattemp = $DATPATH . $key . ".dat"; my (@messx,@content,@logdat); my ($lognum,$mailto,$time,$brmax,$topnum,$firstlog,$name,$mail,$subject,$message); open(RDAT,"<$dattemp"); @logdat=<RDAT>;#ログを配列に読み込む close(RDAT); #ログのカキコ数を取得 $lognum = @logdat; if(-w $dattemp && $lognum > 999){ #open(OVER, ">>$dattemp"); #print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; #close(OVER); #chmod(0555, $dattemp); #$lognum++; ← コメントにした >>330 の #ログのカキコ数を取得 から #1つ目の要素を読み込む の前までがいらない。 この中の$lognum++;が最終的にsebject.txtに書かれているので 実際より+1された数が入ってしまう。 変更 if (open(OUT, "+>>$DATAFILE")) { my @logdat = <OUT>; my $lognum = @logdat; ++$lognum; if($lognum > 1010) { close(OUT); DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"); } print OUT "$outdat\n"; if($lognum > 999) { print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; close(OUT); chmod(0555, $DATAFILE); } else { close(OUT); #パーミッション調整 umask(0); chmod(0666, $DATAFILE); } } >chmod(0666, $DATAFILE); レス数が1000を超える原因と思われ 解決した? 最終的に subject <= 実際のカウント になればいいような datの読み込みを2回やってるんですね〜……。 レスの書き込みとレス数の取得を同時にやる(>>353 の処理を >>350 に持ってくる)のがいいかも。 ……大手術(汗)。 >>354 おいらもそう思ったですよ。 chmod 0555 しても、追っかけてきてるプロセスが chmod 0666 しちゃって、 そのプロセスが、chmod 0555 しても。。。 chmod 0666 を消したら解決だったりして。 >>357 chmodが効かないって変だと思ったんだよね。 でかける前に見た。 こりゃ、>>354 がビンゴな気が。 でなきゃ、いくらひどいじょーきょーでも、4000とかいく原因とは考えにくい。 しばらくオフライン。たまーにPHSでチェックするかも。 というわけで、live8,9に chmod(0666, $DATAFILE); を消したやつを入れてみてくださいですー。 >>353 処理の順番が。。 これでどですか。 if (open(OUT, "+>>$DATAFILE")) { my @logdat = <OUT>; my $lognum = @logdat; if($lognum = 1000) #正常処理 { print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; close(OUT); } if($lognum > 1000) #非常時処理 { close(OUT); DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"); } print OUT "$outdat\n"; chmod(0555, $DATAFILE); } else if($lognum < 1000) #1000未満時処理 { close(OUT); #パーミッション調整 umask(0); chmod(0666, $DATAFILE); } ++$lognum; } 訂正。。 if (open(OUT, "+>>$DATAFILE")) { my @logdat = <OUT>; my $lognum = @logdat; ++$lognum; if($lognum = 1000) #正常処理 { print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; close(OUT); } if($lognum > 1000) #非常時処理 { close(OUT); DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"); } print OUT "$outdat\n"; chmod(0555, $DATAFILE); } else if($lognum < 1000) #1000未満時処理 { close(OUT); #パーミッション調整 umask(0); chmod(0666, $DATAFILE); } } >>351 テレビ朝日実況板より スクープスペシャルその1 (1001) http://live8.2ch.net/test/read.cgi/liveanb/1078030448/ 1000 名前:名無しステーション 投稿日:04/02/29 14:52 ID:gFLAwWAx (1001無し) スクープスペシャル 警察の裏金疑惑第2弾 その2 (1000) http://live8.2ch.net/test/read.cgi/liveanb/1078030554/ 1000 名前:名無しステーション 投稿日:04/02/29 15:20 ID:LyiRwuOt (1001無し) この間に加えた修正によって、subject.txtに書かれるレス数と 実際のレス数が一致するようになりました。ありがとう! #ERROR! #ERROR:このスレッドには書けません! #修正ここまで。 # "ERROR:このスレッドには書き込めません。緊急緊急緊急!!" が出てこないけど今ソースはどうなってるのだろう。。 if (open(OUT, "+>>$DATAFILE")) { my @logdat = <OUT>; my $lognum = @logdat; ++$lognum; if($lognum = 1000) #正常処理 { print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; close(OUT); chmod(0555, $DATAFILE); } if($lognum > 1000) #非常時処理 { close(OUT); DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"); } print OUT "$outdat\n"; } else if($lognum < 1000) #1000未満時処理 { close(OUT); #パーミッション調整 umask(0); chmod(0666, $DATAFILE); } } >>364 それから、1001ストッパーを書き込む「前」に$outdatを出力しないとだめです(でないと書き込みが吸い込まれる)。 1001ストッパーが書き込まれないのは ・プロセスAが >>353 で1000レス目を書き込む ・プロセスBが >>330 で(1000レス以上なので)chmodする ・プロセスAが1001ストッパーを書き込もうとするもEPERM と予想してみる。 ということで、>>353 を if ($lognum > 1010) { close(OUT); chmod(0555, $DATFILE); DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"); } にして、>>330 の chmod(0555, $dattemp); を削除する、というのはどうでしょ。 ……って、writeはEPERMなんか返さないか……。 これ全部いらないのか? if(-w $dattemp && $lognum > 999){ #open(OVER, ">>$dattemp"); #print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; #close(OVER); #chmod(0555, $dattemp); #$lognum++; if(-w $dattemp){ my $datdat = $DATPATH . $key; my $tmpdat = $DATPATH . $key . ".tmp"; my $success; open(COPY, "cp $dattemp $datdat |"); close(COPY); $success = 0; until($success){ $success = rename($datdat, $dattemp); } chmod(0555, $dattemp); unlink($tmpdat); } } ファイルロックの名残? 総帥に事情聴取してからにしてください。 こないだのiスクリプト消滅騒ぎのような事態は避けないと。 あらためて ・複数のプロセスが999レス目のつもりで書き込む→1000オーバー(ただしストッパーは書かれない) ・1000オーバーなので >>330 でchmod と予想してみる。 ってことで、>>330 の1001ストッパー書き込みも復活すれば……。 ……泥縄だなぁ。 ええとこれとまったく同じメッセージが書いてある部分のソースがないのですがどの部分でしょうか ↓ ERROR:このスレッドには書けません! あと $outdat っての値が代入されている部分のソースもないし。。 ええとこういう風になっているはずなのですけど。 DispError("ERROR!","ERROR:このスレッドには書き込めません!"); ---- ERROR! ERROR:このスレッドには書けません! >>377 なんか重複してるけど、一緒です。 #.datが存在してないか書けないならばいばい unless(-w $DATAFILE){ DispError("ERROR!","ERROR:このスレッドには書けません!"); } #my $datsizeis =(stat("$DATAFILE"))[7]; #unless( $datsizeis <= 512000){ #DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!"); #} unless( -w $DATAFILE){ DispError("ERROR!","ERROR:このスレッドには書き込めません。"); } unless( -s $DATAFILE <= 512000){ DispError("ERROR!","ERROR:このスレッドは512kを超えているので書けません!"); } あ間違えたました、、こうです DispError("ERROR!","ERROR:このスレッドには書けません!"); >>370 chmod 0555 が失敗したときか、 chmod 0555 の後に書き込めるようになっちゃったときの処理ですかねー、 あんまり意味がないような気もする、、 >>378 別にどうでもいいんだけど 512k超えの処理ってunlessでやる意味あるんだろうか >>370 でunlinkしている $DATPATH . $key . ".tmp" というファイルはどこで作ってるんでしょ? こんなに謎だらけでもなんとなく動いているところがすごい・・・(´Д`;) ようし、外してみよう。 #if(-w $dattemp && $lognum > 999){ ##open(OVER, ">>$dattemp"); ##print OVER "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; ##close(OVER); ##chmod(0555, $dattemp); ##$lognum++; # #if(-w $dattemp){ #my $datdat = $DATPATH . $key; #my $tmpdat = $DATPATH . $key . ".tmp"; #my $success; #open(COPY, "cp $dattemp $datdat |"); #close(COPY); #$success = 0; #until($success){ $success = rename($datdat, $dattemp); } #chmod(0555, $dattemp); #unlink($tmpdat); #} #} http:// 鯖.2ch.net/板/dat/key.tmp作ってソコで処理して、 http:// 鯖.2ch.net/板/dat/key.datにコピーして、 http:// 鯖.2ch.net/板/dat/key.tmpをあぼーんしてる? >>391 何人の人がそう思いチャレンジしてきたことか・・・ いまだ勝者は一人としていない、暗黒の世界から生還したものはいない。 >>390 たぶん /dat/key.dat に書き込んで /dat/key.dat を /dat/key にコピーして ←たぶん無駄 /dat/key を /dat/key.dat にリネームして ←たぶん無駄 /dat/key.dat を書込み禁止にして /dat/key.tmp をあぼーんしている ←たぶん無駄 かと……。 >>392 まぁチャレンジできる人が限られてるし…。 ここの暇人たち(←おい)なら軽く片付けちまいそうな気も…w >>392 というか、ソースが(NDAでもいいから)完全公開されれば(ry 芸スポなんですけどいいですか? 【サッカー】日本代表選手7人が合宿中に規則違反で飲酒★2 http://news6.2ch.net/test/read.cgi/mnewsplus/1077996750/ 1001ストッパーが壊れてるのか ストップしないんですか。 >>400 で、どうするんです? と聞いてみるテスト。 これが期待通りの動作をしていないってことっすね if (open(OUT, "+>>$DATAFILE")) { my @logdat = <OUT>; my $lognum = @logdat; テストとしてだけど1000を超えたらあらゆる変数を出力しまくってみては 1010のやつを生かしておいて,変数を色々出力して検証してみてはどうでしょ? >>398 >>399 >>403 チッ。記念カキコしに行ったのにどこもかけなかった! 現状>>403 が一番凄い。 3000突破してる・・・ でもどうやら止まったみたいですね。 >>403 は、他の人が書きこめたてた時もオレはユーザー情報が消失してますとか言われて書き込めなかった うーん。。。とりあえず各種変数を出力するようにしてみたら? ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる