bbs.cgi再開発プロジェクト 3
■ このスレッドは過去ログ倉庫に格納されています
これ全部いらないのか? 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 は、他の人が書きこめたてた時もオレはユーザー情報が消失してますとか言われて書き込めなかった うーん。。。とりあえず各種変数を出力するようにしてみたら? >>416 >>404 を確かめるために 試験的に >>353 の if($lognum > 1010) を if($lognum > 300) とかにして 300を超えたスレッドに書き込んでみて 「緊急緊急緊急!!」が出るかどうかを見てみるのはどうでしょか。 >>424 それは危険過ぎるとおもうなぁ>300にする >>425 いや、いきなり全鯖に配るわけじゃなくて、(金) でテストするだけでも、と……。 qbのbbs.cgi更新すると一気に全鯖いくんじゃなかったっけ?(わからん >>426 (金)ではやり辛いでしょ。 いっそのことN速で実験しましょ。 いろんなとこにフラグ立てまくって出力させてみてほしいです どこが実行できていて、どこができてないのかよく分かんない >>404 のレス数チェックが効いてるかどうかは、このスレに1回書き込むだけで判明するかな、と。 http://qb.2ch.net/test/read.cgi/operate2/1068621844/ このスレがいま350レスなので……。 ん? もう解ったんでないのか? 違うところで戦っていたということが、 ひょっとしたら my @logdat = <OUT>; の前に seek(OUT, 0, 0); を入れるといいかも(←自信なし)。 うちのwindowsだと、 if (open(OUT, "+>>$DATAFILE")) { #この時点でファイル末尾にseekされてる my @logdat = <OUT>; my $lognum = @logdat; これだと@logdatは空になっちゃうんだけど、、、 if (open(OUT, "+<$DATAFILE")) my @logdat = <OUT>; my $lognum = @logdat; じゃないすかね >>436 うちのcygwinだと"+>>"でopenした時点でファイル先頭にseekされてました。 あと、追記モードじゃないと書き込みがぶつかったときにヤバいです。 なんか…ニュー速+も1001ストッパー壊れてるのね。 なにがなんだか… >>433 ええと>>330 に手を加えていたものが>>350 で その後>>353 でテストして>>330 あたりに戻ったということなのかな。。 どのソースを元にやればいいのか、、 ちょっとゆっくりやってほしい、、 今試したら、Windows(ActivePerl)でもsysopen使ったら先頭だった。 >>249 だけど、>>438 と同様、 cygwin+perl5.8.2で、読み込み時は先頭から 同じくlinux(redhat8かな)+perl5.8.0でも。 思ったんだけど bbs.cgiを置き換えちゃうと不具合が出たときに面倒だし 変数を表示しようとしてもなかなか難しい。 そこで、bbs_test.cgiにして実験する。 で、こいつにPOSTするのも面倒だから POST先だけを変えたread_test.cgiを作り テスト用の鯖に入れる。 で、書き込みテストはそっちでやって、内部の変数や状態をずらずらと表示する。 ただ、1000到達時のテストは難しいかな。 open(OUT, ">>$DATAFILE"); print OUT "$outdat\n"; close(OUT); dat 追記部分は元にもどす。 そして、 ここに持ってくる 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($lognum > 1010) { DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"); } if($lognum > 999) { open(OUT,"<$dattemp"); print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; close(OUT); chmod(0555, $dattemp); } else { #パーミッション調整 umask(0); chmod(0666, $dattemp); } >>447 を見て気づいたこと。 ・「緊急緊急緊急!!」が書き込み終わった後になる ・1001ストッパー書き込み時のオープンモードが読み込みモード >>453 ども 、 直してみた if($lognum > 1010) # ここはこないと予想 { DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!"); } if($lognum > 999) { open(OUT,">>$dattemp"); print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n"; close(OUT); chmod(0555, $dattemp); } else { #パーミッション調整 umask(0); chmod(0666, $dattemp); } >>447 open(OUT,"<$dattemp"); print OUT "1001<><>Over 1000 Thread<>この 鰓がでるよね? もっと餅付いてくだちい。。。 chmod(0666, $dattemp);がchmod(0555, $dattemp);よりあとに実行されるとは考えにくいけど、 念のため、 if($lognum > 1010) { chmod(0555, $dattemp); DispError("ERROR!", "ERROR〜"); } としてもいいかも。 ウスターの一部しか開示されないので 処理の流れがわからない。。。 あと、別のところで問題がある場合も 思い込んでる場所のみを開示&思考なので発見が遅れる。。。 な予感('-') if (open(OUT, "+>>$DATAFILE")) { my @logdat = <OUT>; my $lognum = @logdat; ---- この部分ですけど実際にファイルをopenしているのはどこなんだろう、、 そして$outdat には何が入っているのだろう、、 こんな風に変更したら、どですか。>>330 と思ったらまたやり直し、、、 subback.htmlが1000になってるのはいいのかな? 1000超えたスレッドをreadonlyにするってことですかな。 >>468 あー、1001ストッパー書き込み時に++$lognum;が必要ですね……。 ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる