bbs.cgi再開発プロジェクト 3
■ このスレッドは過去ログ倉庫に格納されています
>>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;が必要ですね……。 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);
$lognum++;
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
>>457
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
って必要なの? $SUBLINE = $subject . " (" . $lognum . ")\n";
$SUBLINE がグローバルになっていて
あとで subject.txt を更新するのに使うと予想。
オープンソースは荒らしに利用されるからダメだそうな >>445
実況板だったらテストでいちなり導入してもOk。
というのが2chノリ 未承諾さんあたりを拉致して缶づmうwあおまえなにすrあwせdrftgyふじこlp;@ 作り直したほうが性能よくなるけど管理人が弄れなくなるからいまのやつ使ってるんだよな>bbs.cgi たぶんバイナリ化せずにソースを入れてるんじゃないかと。
バイナリ化するのはroot ★さんの仕事。 悪いことは言わん。
1000チェックだけでも、別ロックファイルとして*.dat以外にしないとchmodヘルになると思う。
ファイルI/Oを嫌って1ファイルでゴニョゴニョしているほうがパフォーマンスが悪くなると思う。
ERROR!
ERROR:このスレッドには書けません!
---
>>491のスレは1000のチェックではなくてパーミッションチェックで弾かれている予感。
あとは高負荷がかかった時でも大丈夫ならOKなのかな、、 ↑
1000行ってしまった後にあらため書き込もうとした時の話です。
なんかあまり役に立てなかった悪寒 _| ̄|○ >>498
subject.txtが1002になってる >>498
subject.txtではレス数が1002になっている……。
ミナカッタコトニシヨウ 1000越え判定の時の$lognumに直接1001を叩き込んじゃだめですか?>判るひと >>502
それ以前に本文書き込み動作が畳み込まれているので、、、(哀) if($lognum > 999)
{
if (open(OUT,">>$dattemp")) {
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
$lognum++;
}
chmod(0555, $dattemp);
}
これでどうでしょ。
>>502
レス数がきっかり1000で止まる保証がないので、直接1001をいれるとマズいです。 >>503-504 サンクスコ。
むうー。修行しよう。 >>504
そね
#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 1010)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
$lognum++;
}
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
まとめ(メモメモ)
処理の流れは
1) とにかく色々チェック。
2) dat に追記。
3) MakeWorkFile で html/xxxxxx.html を作る
この時に 1,000 超えを判定、 1,001 を書き 0555 にする。
この関数内で $SUBLINE = $subject . " (" . $lognum . ")\n";
を作りあとで subject.txt の書き換えに使う。
4) subjext.txt 書き換え
5) ふぅ終了。 問題は 2) で追記したあと 0666 にしていたので
せっかく 0555 で書き込めなくしたのに書き込めていた。
あと bbs.cgi の最初のほうで
unless( -w $DATAFILE){
DispError("ERROR!","ERROR:このスレッドには書き込めません。");
}
を行い、なるべく負荷をさげようと。 大幅なオーバーランはなくなったか → たぶん
前よりも処理は軽くなったか? → たぶん
要観察ですなぁ
なんか、あまり変わってない気がするのは気のせいに違いない。
#dat追記部分
if (open(OUT, ">>$DATAFILE"))
print OUT "$outdat\n";
close(OUT);
} else {
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
#ログのカキコ数を取得
if($lognum > 1010)
{
chmod(0555, $dattemp);#念のため
}
elsif($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
$lognum++;
}
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
にしたほうがいいかも。 最大書き込み数がてんでばらばらなのはなんとか
ならないのか?
全レス取得できたのかどうか,すっきりしないんだが。 >>484
>オープンソースは荒らしに利用されるから
誤解されるようなことを振りまかないでー。
ApacheやFreeBSDはオープンソースですが荒らしに利用されていますか? こうしたらどうなる?
open(RDAT,"<$dattemp");
@logdat=<RDAT>;#ログを配列に読み込む
close(RDAT);
#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 1010)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
#$lognum++;
open(RDAT,"<$dattemp");
@logdat=<RDAT>;#ログを配列に読み込む
close(RDAT);
$lognum = @logdat;
}
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
>>515
レス数のカウントがより確実になって、ちょっと重くなる? 各種cgiテスト専用の板を作ったほうがよさげな悪寒。 >>517
いちおう運用情報(金)がそれにあたってます。
でも、1000レスとかそういった実験にはむかんとですよ。 >>515
その「ログのカキコ数の取得」ルーチンがレス書き込みより後にある限り
はほとんど変わらないと見た 悪い
上のログ読まずに書いてしまった
いろいろいじった後だったのね if($lognum > 1010)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
ここを
if($lognum > 999)
{
if($lognum > 1010)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
else
{
if(open(OUT,">>$dattemp"))
とかだめかな。 >>521
if($lognum > 999)
{
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!") if($lognum > 1010);
if(open(OUT,">>$dattemp"))
{
・・・書いてみたかっただけなの
昨日は本業超多忙につき、>>360 から未処理。
急ぎで何かしなきゃいけないことある?live8/live9のbbs.cgiの更新とか。
12:00ごろまた来るので、誰かレス番で教えてちょ。
# 午後は少し時間とれる見込み。 ERROR!
ERROR:このスレッドには書き込めません。緊急緊急緊急!!
ホスト*
名前: 2chtubo愛用者〜ヘ(゚д゚ヘ))))))〜61 ◆2CHTUBOC5A
E-mail:
内容:
きねんかきこ。
こちらでリロードしてください。 GO!
分からないことがあったら2ちゃんねるガイドへ。。。
-------------------------------------------------------
ちゃんとでてるね。。。 >>522
前 if と後ろ if を混ぜたらややこしいがな と、思ったら、書きこまれてるし。だめじゃん、仕事人。 警察板( http://society.2ch.net/police/ )が困った状態なので、お知らせしておきます。
subject.txt上は1011なのに、実際は2000オーバースレ有り
(IEで)各スレッドURLでは、1001ストッパーまで表示、書き込み欄なし
(〃)板トップでは、実際の最終レスまで表示、書き込み欄あり
(専用ブラウザで)スレ一覧のレス数がずれるものの、書き込み可能
http://society.2ch.net/test/read.cgi/police/1058340116/2917 など
ちなみに、レス数1000近くのスレをageて、次々にお祭りを始めているようです。
http://society.2ch.net/test/read.cgi/police/1040783990/962
他板で宣伝も見つけました。
http://live8.2ch.net/test/read.cgi/livenhk/1078104752/190 つまり >>519 かつ 999 判定より 1010 判定が前にあるせいで
書き込まれてから緊急緊急が出てるわけだな
>>523
急ぎで society の bbs.cgi を元に戻してくださいw >>528
society(=oyster17)って、私ログインできるのかな。 ログインできにゃいのか?
つーかもしかして全板この仕様なのか? でもよく読むと 515 のとおりなら 1010 判定のあとに 999 判定も
通ってるはずだから、止まるんじゃないのかな?
&DispError って、中で exit してるのかな 変更してみる
#ログのカキコ数を取得
$lognum = @logdat;
if($lognum > 1010)#念のため暴走ストッパー
{
chmod(0555, $dattemp);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
}
if($lognum > 999)
{
if(open(OUT,">>$dattemp"))
{
print OUT "1001<><>Over 1000 Thread<>このスレッドは1000を超えました。 <br> もう書けないので、新しいスレッドを立ててくださいです。。。 <>\n";
close(OUT);
$lognum++;
}
chmod(0555, $dattemp);
}
else
{
#パーミッション調整
umask(0);
chmod(0666, $dattemp);
}
close(OUT);
chmod(0555, $dattemp);
DispError("ERROR!", "ERROR:このスレッドには書き込めません。緊急緊急緊急!!");
のほうがいいかも (´-`).。oO(いつdatに書き込んでるんだろう…) >>537
(´-`).。oO(たぶん別の場所でやってて、そこは今大人の都合で書いてないだけなんだよ、とか言ってみるテスト。) >>539
ご苦労様です。
お茶でもどうぞ。
ζ
旦 ⊆⊇ んで
現状は 1,000行ったスレッドは
dat = 1,001 まである
index.html = 1,000 までしか出ない(以前と使用違うけど、がまんの方向で)
subject.txt = 1,001 まである
今回の改修の目的は
2,000 とか 3,000 まで書き込めてしまうのを 1,000 近辺で止める。
なのでどうなるか観察しよう。 >>541
>2,000 とか 3,000 まで書き込めてしまうのを 1,000 近辺で止める。
何が何でも1,000ぴったりで止めるのか
1050ぐらいまで放置するか決めよう
>>542
1,000 「近辺」というぐらいだから1050でもアリじゃないかな……。 ちょっとくらいはオーバーしてもいいという方針だったと思うのだが、、
過去ログorソースコード読んだ? 1000を書いたbbs.cgiさんが、責任持って1000ストッパーを書いて、
chmod/fchmodしてから終わる、というのはどうなんでしょう。 それに挑戦したのが >>255 あたりからだったりして、 >>545
それだと「999を書いたbbs.cgiさん×2+1001以降を書くbbs.cgiさん」な場合に
ストッパーが効かなくなる気がするです。 >>548
そっか。当然そうだよね。
なんだか、某DJBに「フーン」って笑われそうな議論だよなぁ。ここでのあがきって。
もちろん、私も含めて。 1000 近くになると
my @logdat = <OUT>;
のコストがバカにならないんだよね
読み進めてる間に他のプロセスがガンガン書いてる
やっぱ 1 レスにつき 1 バイト追記するレス数ファイルを
持つのがいいんじゃなかろうか ■ このスレッドは過去ログ倉庫に格納されています