bbs.cgi再開発プロジェクト 3
レス数が900を超えています。1000を超えると表示できなくなるよ。
>>843
mod_perlはhttpdプロセス一つごとにcgiが起動するからメモリ食う。
FastCGIの方がいいよ。 >>844
read.cgi以外の*.cgiを処理するmod_perl有効のhttpdと。
*.gif|*.htmlなどの固定ファイル専用のSTATICビルドしたhttpd。
その二つを別ポートもしくはaliasした別IPで立ち上げて。
poundで分岐するってのはどうだ? おそらく>>844は理解できていないか失敗した厨房
Apache拡張ガイドでも嫁
>>846
2chにそのような運用を期待するのは浅はかだと思わんかね そもそも、httpd数とプロセス(コネクション)数は1対1にする必要ないんだけどね。
httpdが数百個も動いてメモリが気になるなら、マルチスレッドで動かせばいいだけでしょ。
apache2を使っているんだから。 >>848
MPM workerで安定動作しているところってどこか知ってる?
ヤフーとかgoogleとかはどうなんだろうなぁ。 my $ripfile = $PATH . "内緒";
my (@IP, @IIP, $TIP);
if($FORM{'subject'} ne ""){
#スレッド立てすぎチェック
my (@IP, @IIP, @ZIP, $TIP, $VIP, $SIP, $JIP, $HIP);
$TIP = $HOST;
$TIP =~ s/<(.*)>//g;
$VIP = $TIP;
if($FLAG == 5){
$TIP = $FORM{'sid'};
$TIP =~ s/\W/\\$&/g;
}else{ my @ippart = split(/\./, $TIP);
$JIP = $ippart[0];
if($TIP !~ /[a-zA-Z]/o){
$TIP =~ s/[0-9]+$//o;
$TIP = "^" . $TIP;
}elsif($JIP =~ /[x\-\.\d]{12}/o){
$TIP =~ s/([x\-\.\d]{5})([x\-\.\d]*)/$1\.\*/o;
}elsif($JIP =~ /\d{8}/o){
$TIP =~ s/(\d{3})(\d*)/$1\.\*/o;
}else{
if(@ippart < 5){
$TIP =~ s/\d+/\.\*/g;
}else{
if(($ippart[@ippart-6] =~ tr/\d/$&/) > 4){
$TIP = $ippart[@ippart-6];
$TIP =~ s/\d.*/\.\*/g;
}else{
$TIP = "";
}
$TIP .= "$ippart[@ippart-5].$ippart[@ippart-4]";
$TIP =~ s/\d+/\.\*/g;
$TIP .= ".$ippart[@ippart-3].$ippart[@ippart-2].$ippart[@ippart-1]";
}
}
$HIP = "$ippart[@ippart-3].$ippart[@ippart-2].$ippart[@ippart-1]";
} # 書き込みログファイル
open(RIP,"<$ripfile");
@ZIP = <RIP>;
close(RIP);
# 書き込みホスト保存
open(WIP,">$ripfile");
#flock(WIP,2);
print WIP ("$HOST,$FORM{'sid'},$FORM{'key'}\n", @ZIP)[0..$SETTING{'BBS_THREAD_TATESUGI'}-1];
close(WIP);
} RIPファイル内緒って。。。(汗
普通に知られてると思うんだけどな。。。(汗 >>853であれこれやってるものが>>854のどこにも使われてないように
見えるんだが >856
なんか他の色々なところに使ってて、
すれたて規制には使ってないらしらし、 112 名前:FOX ★[] 投稿日:04/06/12(土) 17:25 ID:???
bbs.cgi に入れることに成功した
んじゃ 実際に呼んでみよう。。。 cgi以外に、通常ブラウザを制御できるプログラムはないのですか?
>>862
どうぞこちらへ
WEBプログラミング@2ch掲示板
http://pc5.2ch.net/php/
サーバーサイドプログラミング関連の話題を扱っています。
Perl, PHP, Java, Ruby, C, Tcl といった言語処理系の話、
Apache, CGI, JSP/Servlet, ASP, ColdFusion といったアプリケーション実行環境の話、
Oracle, PostgreSQL, MySQL といったデータベースの話などをテーマにしています。
スレタイトルは言語がハッキリわかるようにしてください。(言語を特定する場合)
配布中止/配布元不明スクリプトが欲しい人はダウンロード板へ
JavaScript、VBScript等クライアントサイドの話題はWeb製作板へ
で、質雑スレで bbs.cgi が云々と宣ってた香具師はどうした?(哀) Apacheモジュールのmod__bbsならあるけど2chで使うにはコアすぎるかな? NGワードのことだけんども
"&r"を削除するんでなくて、"&r"に変えるようにできないかな。
現状の抜け穴対策と、通常の投稿として"&r"がある時の救済策。
スレッドタイトルのNGワードも同様の処理にして欲しい。
現在の、"&"を全て削除する方法では誤爆が多すぎる。 一応書いとくと、bbs.cgiにもNGワードがございまして、
特定の文字列があると投稿できなかったり、或いは
別の文字列に変えられたり、削除されたりするのですね。 &rが削除されるのは、名前欄だけじゃないのか?
ここに→&r←来た 要望はここでいいのかな?
https://で始まるURLもリンク形式にして欲しいんだけど bbs.cgiがdatに記録するのは素のURLで
リンクにしてるのはread.cgi(or専用ブラウザ)ですね bbs.cgiが処理するvalue値、形式は何なんでしょか?
<input type=hidden name=time value=1095940962>
初歩的な質問ですみませんが、どなたか <(_)> スレ一覧生成するときに、1行1スレにして、可読性を高めることはできますか? ソースきたないなぁ>>852-854
これはメモリをいっぱい使う典型的な例じゃない? Perlわからんのに下手なことやる★がいるからな。
2chにワケワカランおまけ機能つける奴とか それで負荷がどうのこうの言って制限とかやめてよ
先にやることあるでしょ 思ったんだがPerl使うより
サーバサイドJAVA使ったほうが比較処理早いと思うんだが・・・ とりあえずさ、どう考えても今のやつに手を加えるのが現実的ではないだろうか
誰か有能な人を雇用してよ。
俺とか。 不動楽さんが手を入れて、明らかに板飛びが減ったですね。 共有メモリ使ってはいかがですか?
共有メモリ上にスレッド毎のメッセージ数入れておいて、共有メモリを更新する数msecだけ
SYSVセマフォ(若しくはPOSIXのセマフォ)で排他。
1000を多少越えても良いのだから参照に排他は不要。
SYSV共有メモリで足りなければmmapの共有メモリで。
処理フロー
1.規制確認
2.レス数確認
3.共有メモリロック
4.レス数インクリメント
5.共有メモリロック開放
6.datにアペンド。
mod_cgidso入れさせてテストさせて見たいといってみるテスト
せっかく5.3Rもでたことですし、exで実験!と振ってみるテスト
>>900
つーことは今のbb.cgiソース管理者は不動楽さんということでFA?
>>901
mmapはかなりコストを食うということで却下された経緯があったはず >>902
管理者というか、いじっている人の一人かと。 >>903
ふむ、では今いじれるのはrootさんを除くと(一部はその気になればいじれるため)
ひ(りゃ(ほとんど触っていなさそうだけど)
見習い
不動楽
あとだれがいましたかね。 read.cgi はともかく bbs.cgi で mod_cgidso を使うとなると,
普通の実行可能バイナリじゃなくて共有オブジェクトにしなきゃいけないとか,
自前でリソース解放してくれないとどんどんリークしていっちゃうとかで,
perlcc で直接バイナリ作るんじゃなくて,生成された C コードを
手作業で直さなきゃならないんでしょうけど......
まぁ bbs.cgi に関しては,fork() させないようにするなら
mod_perl の方が現実的かなとは思います.
あとは,suExec の代替措置も必要なんでしょうけど,
perchild MPM よりも安定して動くと言われているのがこれ.
Metux MPM http://nibiru.borg.metux.de:7000/wiki.mpm/
**********************************************************************
個人的に bbs.cgi 関連で気になっているのは,まずは ftp のリンク URL が
おかしくなること (ex. ftp://core.ring.gr.jp/pub/ ).これは ime.nu で
ftp リンクを扱えるようになっていなければ,ime.nu を入れず直リンに
した方がいいのかも知れませんけど.
あとは,NAME/MAIL の Cookie の問題ですね.設定がサーバサイド,
読み出しがクライアントサイドという不整合のため,Mozilla 等では
文字化けしてしまうと.現状では Set-Cookie ヘッダで設定していますが,
これを JavaScript の方で設定すればいいのではないかな,と.
とはいえ,bbs.cgi 出力に Cookie 設定用 JavaScript コードを入れると,
" や \ を \ でエスケープさせる必要がありますが,Shift JIS だと
漢字等の2バイト目が \ になることもあるんで,この判定をきっちりやるのも
結構大変か......むしろ bbs.cgi 出力では行わず,投稿フォーム側の
onsubmit() でこの処理をやらせた方が安全ですかね. その場合の各板トップ及び read.cgi 出力の JavaScript コード変更案.
----------------------------------------------------------------------
onload = function(e) {
var N = getCookie("NAME"), M = getCookie("MAIL"), i;
with (document)
for (i = 0; i < forms.length; i++)
if (forms[i].FROM && forms[i].mail) {
forms[i].FROM.value = N;
forms[i].mail.value = M;
if (forms[i].addEventListener)
forms[i].addEventListener("submit", setCookie, false);
else
forms[i].onsubmit = setCookie;
}
};
if (!Date.prototype.toUTCString)
Date.prototype.toUTCString = Date.prototype.toGMTString;
function setCookie(e) {
var exp = new Date();
exp.setMonth(exp.getMonth() + 1);
document.cookie = "NAME=" + escape(this.FROM.value) + "; path=/; expires=" + exp.toUTCString();
document.cookie = "MAIL=" + escape(this.mail.value) + "; path=/; expires=" + exp.toUTCString();
}
function getCookie(key, tmp1, tmp2, xx1, xx2, xx3, len) {
tmp1 = " " + document.cookie + ";";
xx1 = xx2 = 0;
len = tmp1.length;
while (xx1 < len) {
xx2 = tmp1.indexOf(";", xx1);
tmp2 = tmp1.substring(xx1 + 1, xx2);
xx3 = tmp2.indexOf("=");
if (tmp2.substring(0, xx3) == key)
return unescape(tmp2.substring(xx3 + 1, xx2 - xx1 - 1));
xx1 = xx2 + 1;
}
return "";
} もう今はスクリプト配布してないんだっけ?
4.2ぐらいのころのは持ってるよ。 MySQL使えないんでしょうか?
ファイルシステムでこの規模なんて自分では考えられないです。
DATを返すインターフェイス作っておけば問題ないと思うのですが・・・。 DBとの連携ってどこらへんで×だったんだっけ。
過去ログ引っ張り出すのもまんどくせ。 別に技術的な理由で×というのは無かったような。
強いて言えばめんどくさいってだけ。 >>914
DMDM と MDMD の MD5 を算出して、DB(MySQL) と照らし合わせて合致すれば桶だと思うので、
その部分以外は使い回しかと思われんこん。 >>915
そもそもMD5があやしい疑惑があるんだが・・・・ >>911
過去ログ検索とかではDBは有効だけど、ライブスレッドなら
ファイルのが負荷少ないしベストな選択のように思うけど、
どうなんだろう。 負荷ってどうなるのかなぁ・・・
PHPで試しに作ってみる。 >917
ファイルシステムにするとキューだのロックだのを同期する必要がある。
MySQLだと、そのあたりはデータベースに任せられる。
また、MySQLをバックエンドにして、閲覧系を複数にして負荷分散するのが非常に楽になる。 そうか書き込みのことを忘れてた・・・スマソ
MySQL速いらしいいいかもね。 ひ(ryがいぢれないと採用してもらえなかった希ガス >>920
というかbbs.cgiはそもそも書き込み用途のはずではw datをDBにするとread.cgiも変えざる得ないから、読み書き両方を考える必要があるのか・・・ そーゆーんじゃなくってさ、
bbs.cgi の改良でだいぶよくなる気がする。
だって何あのソース??
おっきく仕様変えなくても。。 >923
Perl DBIでインターフェースを作っとけば、仮にCで書きなおしたりしてもインターフェース部分だけ変えればよいと。
んでDBはDBで切り離してチューニングが出来ると。
閲覧系のキャッシュ同期とかがけっこうノウハウあるらしいので高負荷サイトはそれなりに難しいらしいけど。 関連ページをクリックして、Pingを発射したとき
どう足掻いてもスレッドのURLの末尾の/が相手先に送れないのですが
この問題もこちらでよろしいでしょうか?
2ちゃんねるpingβのスレがあるといいのですが、見あたらないので・・・ これから質問しまくるんで
優しく教えてください。
つまり Perl を知らないぼんくらなんです sub bbs_main
{
our$version = "BBS.CGI - 2005 (for SpeedyCGI)";
&DispError2("FOX ★","<font color=green>FOX ★ ふふふっ</font>");
return;
}
とやって $version を DispEooro2 というサブルーチンで参照したいのですが
どうすれば参照できるんですか?
$version は SpeedyCGI に対応した、いわゆるグローバルな変数ではなく
ローカルな変数です。
ちなみにこうやって失敗しています(500 error)
print <<EOF;
version = $version
EOF
■ bbs.cgi(SpeedyCGI)の巻 part1 (2004/12/01-)
http://dso.2ch.net/test/read.cgi/myanmar/1101890385/48
500エラーになって、書けないっす。
たぶん Premature なんちゃら、って言って、えらーログに残っているはず。 >>930
この例だと
-------------------
#! /usr/local/bin/speedy --r1
our $version = "BBS.CGI - 2005 (for SpeedyCGI)";
sub bbs_main
{
&DispError2("FOX ★","<font color=green>FOX ★ ふふふっ</font>",$version, $errnum);
return;
}
-----------
Dispの第2引数にversionを渡すようにしています。
errnumはエラー番号(たとえばapacheのエラーコードとか) FOX ★
FOX ★ ふふふっ
ホストHOST
FORM{'subject'}
名前: FORM{'FROM'}
E-mail: FORM{'mail'}
内容:
FORM{'MESSAGE'}
こちらでリロードしてください。 GO!
分からないことがあったら2ちゃんねるガイドへ。。。
アクセス規制・プロキシー制限等規制は、2ちゃんねるビューアを使うと回避できることがあります。BBS.CGI - 2005 (for SpeedyCGI)
が出る時と、出ないで500 Internal Server Errorになる時がありますね。 >>930
あ、まちがい、ローカル変数だったですね。スマソorz
# 実は私もperlはあまり詳しくない・・・むしろPHPのほうが強い
printはdisperror内でですかね。 http://dso.2ch.net/test/bbs.txt
現時点での全ソース
今つまずいているところ【2】
$NOWTIME がローカルな変数になっていない
起動されるたびに変わらない
私の言っているローカルと一般的に言うローカルの意味が違うのかも、
別に私が言っているわけじゃないけどサ でも、たまに変わるなぁ
ちょっと時間を置くと換わるのか?
http://dso.2ch.net/myanmar/
ここでやってます >>939
1分以上バックエンドにリクエストがないと、バックエンドをexitするようにしてあるので、
その時には元に戻ります。
やめる場合、bbs.cgiの1行目の-t60をやめればよいです。 なるほど、
-t60 なしでデバッグしたほうがいいっすね、 #!/usr/local/bin/speedy -- -b1048576
にした レス数が900を超えています。1000を超えると表示できなくなるよ。