◆cZfSunOs.Uさん作成のmod_cgidsoにより、大きな負荷軽減が図られたread.cgi。
このスレでは、そんなread.cgiの(再)開発・実装すべき機能について取り扱います。
前スレより:
574 名前:FOX ★[sage] 投稿日:05/01/05 15:54:28 ID:???
全てのサーバ cobra/toger/banana で read.cgi の dso化が完了。
これから href の置き換え ime.nu 対応を行い
それが終了したら第一ステップは完。
第2ステップは
2-1) bug つぶし
2-2) 仕様の変なところは変更
2-3) 時代背景にあわせたデコレーション
こんなとこかと、
前スレ:
read.cgi再開発スレ
http://qb5.2ch.net/test/read.cgi/operate/1087199303/
read.cgi再開発スレ Part2
■ このスレッドは過去ログ倉庫に格納されています
1root▲ ★
05/01/17 06:11:01ID:???2005/09/03(土) 15:51:23ID:baKqLRVMP
ユーザー設定が消失しています
は
SETTING.TXTがありません
という意味だったような・・・?
は
SETTING.TXTがありません
という意味だったような・・・?
358動け動けウゴウゴ2ちゃんねる
2005/09/03(土) 21:52:24ID:D3fR5zU70 それははじめてきいた
2005/09/05(月) 19:13:26ID:PUL6KD6V0
2005/09/14(水) 17:25:48ID:M63OcNG70
同じ板に同時期に存在したスレで両方とも現存してるけど
鯖移動後の処理がちぐはぐだね
スレ番の桁が違うから?
http://academy3.2ch.net/test/read.cgi/min/997631757/l50
http://academy3.2ch.net/test/read.cgi/min/1008244473/l50
http://academy4.2ch.net/test/read.cgi/min/997631757/l50
http://academy4.2ch.net/test/read.cgi/min/1008244473/l50
鯖移動後の処理がちぐはぐだね
スレ番の桁が違うから?
http://academy3.2ch.net/test/read.cgi/min/997631757/l50
http://academy3.2ch.net/test/read.cgi/min/1008244473/l50
http://academy4.2ch.net/test/read.cgi/min/997631757/l50
http://academy4.2ch.net/test/read.cgi/min/1008244473/l50
2005/09/14(水) 23:16:42ID:/qN1JKJE0
いずれread.cgiが無くなるってのはどうですか
せんぶら普及andどっかでみたインスタント2chビューアーみたいなのを個人が作るとかで
せんぶら普及andどっかでみたインスタント2chビューアーみたいなのを個人が作るとかで
2005/09/15(木) 01:05:08ID:55Gsa4Jd0
363動け動けウゴウゴ2ちゃんねる
2005/09/30(金) 15:20:11ID:Je0xBFbV0 広告はスレごと
広告つかないスレはdat
広告つかないスレはdat
2005/09/30(金) 22:59:47ID:oiHocncr0
>>363
真面レスなんだが結構よくない?
ただread.cgiがかなり重くなるかな...?
もしくはスレ作成時にスレ毎に特定の広告を決めるようにしとけば、
(決めかたが難しいけど)スレの1行目(カウンタの次ぐらい)に
広告を出すことはできる...read.cgiも既存のままでいいし。。
真面レスなんだが結構よくない?
ただread.cgiがかなり重くなるかな...?
もしくはスレ作成時にスレ毎に特定の広告を決めるようにしとけば、
(決めかたが難しいけど)スレの1行目(カウンタの次ぐらい)に
広告を出すことはできる...read.cgiも既存のままでいいし。。
2005/10/01(土) 07:52:29ID:qH3QZdfY0
Googleっぽく、関連がありそうなスレに関連がありそうな広告を出すのが
宣伝効果も高くていいような
ただ、今の現状ではアダルト広告ばかりになりそうな気もするけど
宣伝効果も高くていいような
ただ、今の現状ではアダルト広告ばかりになりそうな気もするけど
366動け動けウゴウゴ2ちゃんねる
2005/10/01(土) 17:56:19ID:NrF85Gnc0 2ちゃんねるはアダルトは全面禁止
PINKちゃんねる行き
PINKちゃんねる行き
367あぼーん
NGNGあぼーん
2005/10/03(月) 03:21:47ID:tJFbcg/40
単純にモジュールをlighttpdに移植するだけで結構速くなるみたいだけど、どうよ。
http://pc8.2ch.net/test/read.cgi/mysv/1114551645/949-
http://pc8.2ch.net/test/read.cgi/mysv/1114551645/949-
2005/10/03(月) 20:32:02ID:uKkteBhj0
■定期
datスレの頭にエラーメッセージがない
datスレの頭にエラーメッセージがない
371動け動けウゴウゴ2ちゃんねる
2005/10/04(火) 16:46:11ID:XWwb8xlD0 ■
スレの頭に総レス数書いてあるとheadlineとかから開いた時便利
昔は700-とかがあったからどれくらい進んでるか目安に出来たけど
スレの頭に総レス数書いてあるとheadlineとかから開いた時便利
昔は700-とかがあったからどれくらい進んでるか目安に出来たけど
372動け動けウゴウゴ2ちゃんねる
2005/10/05(水) 22:13:57ID:j/FDPjpp02005/10/05(水) 22:45:28ID:Gn9B0wku0
■
スレスト処理済のスレの書き込み欄が表示されてる→表示させないように
(以前は書き込み欄自体が消えていた)
スレスト処理済のスレの書き込み欄が表示されてる→表示させないように
(以前は書き込み欄自体が消えていた)
374動け動けウゴウゴ2ちゃんねる
2005/10/06(木) 20:16:06ID:nF77rr6t0 なんか知らん間に結構後退してたんだな
375動け動けウゴウゴ2ちゃんねる
2005/10/16(日) 11:20:32ID:iwmJ6+x00376▲ ◆cZfSunOs.U
2005/10/21(金) 06:55:39ID:fdLPk2o+0 http://qb5.2ch.net/test/read.cgi/operate/1129726127/79-80n
これは LANG=ja_JP.SJIS で -c オプションを有効にした際の bbsd による
html 生成では対応してますが,read.cgi でも同様の対応をすればいいのかな.
まぁ少々面倒ではありますが.
これは LANG=ja_JP.SJIS で -c オプションを有効にした際の bbsd による
html 生成では対応してますが,read.cgi でも同様の対応をすればいいのかな.
まぁ少々面倒ではありますが.
377動け動けウゴウゴ2ちゃんねる
2005/10/21(金) 14:35:58ID:uwlfMPx50 ドttp://
ドttps://
てtp://
ドttp://
ドttps://
てtp://
ドttps://
てtp://
ドttp://
ドttps://
てtp://
378動け動けウゴウゴ2ちゃんねる
2005/10/21(金) 14:39:47ID:uwlfMPx50 デtp://
デtp://
デtp://
379動け動けウゴウゴ2ちゃんねる
2005/10/21(金) 14:49:28ID:uwlfMPx50380動け動けウゴウゴ2ちゃんねる
2005/10/21(金) 14:56:55ID:uwlfMPx50381root▲ ★
NGNG read.cgi ver 05.0.1.2 2005/10/29
#ifdef notdef
ap_rprintf(r," <a href=\"http://info.2ch.net/test/tb.cgi?__mode=list&tb_id=%s\">関連ページ</a>\n",url) ;
#endif
#ifdef notdef
ap_rprintf(r," <a href=\"http://info.2ch.net/test/tb.cgi?__mode=list&tb_id=%s\">関連ページ</a>\n",url) ;
#endif
382ひろゆき@どうやら管理人 ★
NGNG383ひろゆき@どうやら管理人 ★
NGNG おぉ、、もう反映してる。。。
385▲ ◆SANUKI/VII
NGNG beは?
387▲ ◆SANUKI/VII
NGNG 結局、ぴろぴろにお仕事が増えました♪
388root▲ ★
NGNG2005/10/30(日) 02:12:56ID:ROeuiZZN0
>>388
乙〜
乙〜
391動け動けウゴウゴ2ちゃんねる
2005/10/30(日) 23:47:45ID:uq8qE1Yc0 │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ
392〈(`・ω・`)〉φ@実+代表
2005/10/30(日) 23:48:22ID:uq8qE1Yc0 │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ │ ≡ ('('('('A` )
│≡ 〜( ( ( ( 〜)
│ ≡ ノノノノ ノ
393動け動けウゴウゴ2ちゃんねる
2005/10/31(月) 01:12:10ID:Cbpa+rBp0 ├─┤ ├─┤ │ ↑↑↑↑
│ ├─┤ ├─┤ ││││
│ │ │ ├─┤ ││││
│ ├─┤ ├─┤ ││││
├─┤ ├─┤ └─┘│││
│ ├─┤ └────┘││
│ │ └───────┘│
↓ └──────────┘
∩∧ ∧ おらっしゃあぁぁ!!!
ヽ( ゚Д゚)
\⊂\
O-、 )〜
∪
│ ├─┤ ├─┤ ││││
│ │ │ ├─┤ ││││
│ ├─┤ ├─┤ ││││
├─┤ ├─┤ └─┘│││
│ ├─┤ └────┘││
│ │ └───────┘│
↓ └──────────┘
∩∧ ∧ おらっしゃあぁぁ!!!
ヽ( ゚Д゚)
\⊂\
O-、 )〜
∪
394動け動けウゴウゴ2ちゃんねる
2005/10/31(月) 22:56:14ID:/WvKyMya0 スレッド表示の下部、
「掲示板に戻る」のリンクと「書き込む」ボタンの位置が近すぎて、
間違えて押しそうになります。
「書き込む」ボタンを違う場所に移動した方が良いのではないでしょうか?
「掲示板に戻る」のリンクと「書き込む」ボタンの位置が近すぎて、
間違えて押しそうになります。
「書き込む」ボタンを違う場所に移動した方が良いのではないでしょうか?
395394
2005/10/31(月) 22:59:20ID:/WvKyMya0 FireFoxだと特に近いです。
時々、コメントのない書き込みを見かけますが、
これが原因じゃないでしょうか。
時々、コメントのない書き込みを見かけますが、
これが原因じゃないでしょうか。
2005/10/31(月) 23:12:20ID:LrKcs97b0
空欄じゃ書き込めないよ
2005/10/31(月) 23:23:33ID:D/fUXAtt0
>395
空欄のコメントにも、意味がある場合もある。
一番典型的なのは、メール欄で会話するスレかな。
もちろん、ただのスレ潰しの場合もあるが。
空欄のコメントにも、意味がある場合もある。
一番典型的なのは、メール欄で会話するスレかな。
もちろん、ただのスレ潰しの場合もあるが。
2005/10/31(月) 23:32:56ID:/WvKyMya0
2005/10/31(月) 23:37:29ID:GkSrk5si0
e-mail欄が入ってても、本文が空白なら書き込まれないよ。
2005/10/31(月) 23:38:45ID:GkSrk5si0
400ゲトついでに改善要望(定期)
■定期>>373
スレスト処理済のスレの書き込み欄が表示されてる→表示させないように
(以前は書き込み欄自体が消えていた)
■定期>>372
容量で埋まったスレのエラーメッセージがない
http://qb5.2ch.net/test/read.cgi/operate/1128074121/
■定期>>373
スレスト処理済のスレの書き込み欄が表示されてる→表示させないように
(以前は書き込み欄自体が消えていた)
■定期>>372
容量で埋まったスレのエラーメッセージがない
http://qb5.2ch.net/test/read.cgi/operate/1128074121/
403398
2005/10/31(月) 23:47:32ID:RsZMl2YO0 あえて言うなら、コメントを途中まで書いて、
やっぱりやめようと「掲示板に戻る」を押そうとして
間違えて「書き込む」を押しちゃった場合は書き込まれてしまいますね。
レアケースですけど。
やっぱりやめようと「掲示板に戻る」を押そうとして
間違えて「書き込む」を押しちゃった場合は書き込まれてしまいますね。
レアケースですけど。
404動け動けウゴウゴ2ちゃんねる
2005/11/01(火) 20:13:26ID:0m10J6aL0 書き込み欄の下ならいいんじゃないの
405動け動けウゴウゴ2ちゃんねる
2005/11/02(水) 23:32:23ID:O6fKTHL502005/11/03(木) 21:14:25ID:Wb1alUud0
>405をクリックした時は新しく窓が開くからややこしい
2005/11/04(金) 21:53:29ID:J5F0mAYz0
408動け動けウゴウゴ2ちゃんねる
2005/11/10(木) 01:50:06ID:F6KZqSyl0 なるほど
2005/11/10(木) 20:41:12ID:alZcmxn20
まあ1000に到達すると発動するんだけどね
レスの形式をとってるから紛らわしい
リンクも張れるし
http://news19.2ch.net/test/read.cgi/newsplus/1131413427/1001
レスの形式をとってるから紛らわしい
リンクも張れるし
http://news19.2ch.net/test/read.cgi/newsplus/1131413427/1001
410動け動けウゴウゴ2ちゃんねる
2005/11/18(金) 00:06:29ID:vWUva2lG0 鯖移転時の旧スレはリダイレクトされなくていいんだっけ
http://that3.2ch.net/test/read.cgi/dataroom/1104683767/
http://that4.2ch.net/test/read.cgi/dataroom/1104683767/
http://that3.2ch.net/test/read.cgi/dataroom/1104683767/
http://that4.2ch.net/test/read.cgi/dataroom/1104683767/
411動け動けウゴウゴ2ちゃんねる
2005/11/21(月) 14:09:27ID:MC3ZP+ou0 ■ime.nu判定
2chのスレにbbspinkのスレを貼った時、以前はJumpページ
(ime.nu経由?)になったと思うんだけど、今は直で飛べるみたい。
http://qb5.2ch.net/test/read.cgi/saku2ch/1131265364/793
BBSPINKは21禁の別サイトのはずなので、
間にJumpが挟まってた方がいいのでは。
2chのスレにbbspinkのスレを貼った時、以前はJumpページ
(ime.nu経由?)になったと思うんだけど、今は直で飛べるみたい。
http://qb5.2ch.net/test/read.cgi/saku2ch/1131265364/793
BBSPINKは21禁の別サイトのはずなので、
間にJumpが挟まってた方がいいのでは。
2005/11/21(月) 15:02:28ID:s3dzvoUu0
提携掲示板に細かいこと言うでない
413動け動けウゴウゴ2ちゃんねる
2005/11/23(水) 01:27:43ID:Iv3Mx+Qt0 それだったらむしろime.st行く前に
「ジャンプ先にアダルト広告(画像つき)があります ジャンプしますか?(y/n)」
が必要なんでは
「ジャンプ先にアダルト広告(画像つき)があります ジャンプしますか?(y/n)」
が必要なんでは
414root▲ ★
2005/12/03(土) 13:14:52ID:???0415root▲ ★
NGNG >>287 をやろうと思って、read.cgi のソースを眺め始めたりして。
今のread.cgiを見てみると、
if(!lookfor(ch2,r)) return 3001 ;
ってやって、まずdatがあるかどうか調べて、lookforの中で、
if(!apr_stat(&CountStat,ch2->zz_fName,APR_FINFO_MIN,r->pool)) /* found */
{
ch2->zz_filesize = CountStat.size ;
ch2->zz_mtime = CountStat.mtime ;
ch2->where = W_LIVE ;
return 1 ;
}
ってやって、datのサイズとmtimeを読んで、その次に、
if(apr_file_open(&in,ch2->zz_fName,APR_READ,APR_OS_DEFAULT,r->pool)) {return 3011;}
apr_file_read(in, ch2->BigBuffer, &ch2->zz_filesize);
apr_file_close(in) ;
とやって、datをバッファに読み込んでいると。
ここに >>287 相当品を組み込めばよさげなわけですが、さて、どうすればいいのかと。
たぶん、HEADしてGETするとか、そういう感じなのかしら。
今のread.cgiを見てみると、
if(!lookfor(ch2,r)) return 3001 ;
ってやって、まずdatがあるかどうか調べて、lookforの中で、
if(!apr_stat(&CountStat,ch2->zz_fName,APR_FINFO_MIN,r->pool)) /* found */
{
ch2->zz_filesize = CountStat.size ;
ch2->zz_mtime = CountStat.mtime ;
ch2->where = W_LIVE ;
return 1 ;
}
ってやって、datのサイズとmtimeを読んで、その次に、
if(apr_file_open(&in,ch2->zz_fName,APR_READ,APR_OS_DEFAULT,r->pool)) {return 3011;}
apr_file_read(in, ch2->BigBuffer, &ch2->zz_filesize);
apr_file_close(in) ;
とやって、datをバッファに読み込んでいると。
ここに >>287 相当品を組み込めばよさげなわけですが、さて、どうすればいいのかと。
たぶん、HEADしてGETするとか、そういう感じなのかしら。
2005/12/05(月) 20:39:29ID:vaenr0/k0
>>411
てか板トップから表示されてるスレの外部リンクは全部ime.st抜けてるよ
てか板トップから表示されてるスレの外部リンクは全部ime.st抜けてるよ
417▲ ◆cZfSunOs.U
2005/12/05(月) 21:38:31ID:qOa8SuPx0 まず,Apache 2.0 → 2.2 移行に関して......おおかたの API は
ソースレベルの互換性は維持されているので,mod_cgidso やそれ用の
プログラム (read.cgi 等) はソースの手直しは不要だと思います.
ただ,バイナリレベルの互換性はないのでリコンパイルは必要です.
しかし,>>287 のは正攻法ではなくトリッキーな方法を用いているため,
2.2 対応には若干の手直しが必要となります(下記のソースでは
その点も含め対応し,2.0 / 2.2 両対応となっています).
まぁこれは,正攻法でやろうとすると別途フィルタモジュールを
作らなければならなくなるので......
ソースレベルの互換性は維持されているので,mod_cgidso やそれ用の
プログラム (read.cgi 等) はソースの手直しは不要だと思います.
ただ,バイナリレベルの互換性はないのでリコンパイルは必要です.
しかし,>>287 のは正攻法ではなくトリッキーな方法を用いているため,
2.2 対応には若干の手直しが必要となります(下記のソースでは
その点も含め対応し,2.0 / 2.2 両対応となっています).
まぁこれは,正攻法でやろうとすると別途フィルタモジュールを
作らなければならなくなるので......
418▲ ◆cZfSunOs.U
2005/12/05(月) 21:39:21ID:qOa8SuPx0 >>415 乙です.
>たぶん、HEADしてGETするとか、そういう感じなのかしら。
そのように2回サブリクエストを実行する形だと非効率になりそうなので,
雪だるま版では lookfor() で内容取得まで一緒にやってしまった方が良さそうな気もします.
その代わり,dat ファイルを読み込んでる部分をスキップすると.
----[この関数を定義しておく]------------------------------------------
#ifdef SNOWMAN
static apr_status_t rdat_filter(ap_filter_t *f, apr_bucket_brigade *b)
{
return ap_save_brigade(f, (apr_bucket_brigade **)&f->ctx, &b, f->r->pool);
}
#endif
----[lookfor() の中]--------------------------------------------------
#ifdef SNOWMAN
int rv;
#if defined(AP_SERVER_MINORVERSION_NUMBER) && AP_SERVER_MINORVERSION_NUMBER >= 2
ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL, NULL, 0, 0};
#else
ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL};
#endif
ap_filter_t f = {&frec, NULL, NULL, r, r->connection};
char *uri = apr_pstrcat(r->pool, "/", ch2->zz_bbs, "/dat/", ch2->zz_key, ".dat", NULL);
request_rec *rdat = ap_sub_req_lookup_uri(uri, r, &f);
if (!(rv = rdat->status == HTTP_OK ? ap_run_sub_req(rdat) : rdat->status)) {
apr_brigade_pflatten(f.ctx, &ch2->BigBuffer, &ch2->zz_filesize, r->pool);
apr_brigade_destroy(f.ctx);
ch2->zz_mtime = rdat->mtime ? rdat->mtime
: apr_date_parse_http(apr_table_get(rdat->headers_out, "Last-Modified"));
}
ap_destroy_sub_req(rdat);
if (!rv) {
ch2->where = W_LIVE;
return 1;
}
#else
if(!apr_stat(&CountStat,ch2->zz_fName,APR_FINFO_MIN,r->pool)) /* found */
{
ch2->zz_filesize = CountStat.size ;
ch2->zz_mtime = CountStat.mtime ;
ch2->where = W_LIVE ;
return 1 ;
}
#endif
----[BigBuffer アロケート / dat 読み込みの部分はスキップ]-------------
#ifndef SNOWMAN
ch2->BigBuffer = apr_palloc(r->pool, ch2->zz_filesize); /* ←多分こんな形で BigBuffer 領域を確保してますよね? */
if (apr_file_open(&in,ch2->zz_fName,APR_READ,APR_OS_DEFAULT,r->pool)) {return 3011;}
apr_file_read(in, ch2->BigBuffer, &ch2->zz_filesize);
apr_file_close(in) ;
#endif
----------------------------------------------------------------------
>たぶん、HEADしてGETするとか、そういう感じなのかしら。
そのように2回サブリクエストを実行する形だと非効率になりそうなので,
雪だるま版では lookfor() で内容取得まで一緒にやってしまった方が良さそうな気もします.
その代わり,dat ファイルを読み込んでる部分をスキップすると.
----[この関数を定義しておく]------------------------------------------
#ifdef SNOWMAN
static apr_status_t rdat_filter(ap_filter_t *f, apr_bucket_brigade *b)
{
return ap_save_brigade(f, (apr_bucket_brigade **)&f->ctx, &b, f->r->pool);
}
#endif
----[lookfor() の中]--------------------------------------------------
#ifdef SNOWMAN
int rv;
#if defined(AP_SERVER_MINORVERSION_NUMBER) && AP_SERVER_MINORVERSION_NUMBER >= 2
ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL, NULL, 0, 0};
#else
ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL};
#endif
ap_filter_t f = {&frec, NULL, NULL, r, r->connection};
char *uri = apr_pstrcat(r->pool, "/", ch2->zz_bbs, "/dat/", ch2->zz_key, ".dat", NULL);
request_rec *rdat = ap_sub_req_lookup_uri(uri, r, &f);
if (!(rv = rdat->status == HTTP_OK ? ap_run_sub_req(rdat) : rdat->status)) {
apr_brigade_pflatten(f.ctx, &ch2->BigBuffer, &ch2->zz_filesize, r->pool);
apr_brigade_destroy(f.ctx);
ch2->zz_mtime = rdat->mtime ? rdat->mtime
: apr_date_parse_http(apr_table_get(rdat->headers_out, "Last-Modified"));
}
ap_destroy_sub_req(rdat);
if (!rv) {
ch2->where = W_LIVE;
return 1;
}
#else
if(!apr_stat(&CountStat,ch2->zz_fName,APR_FINFO_MIN,r->pool)) /* found */
{
ch2->zz_filesize = CountStat.size ;
ch2->zz_mtime = CountStat.mtime ;
ch2->where = W_LIVE ;
return 1 ;
}
#endif
----[BigBuffer アロケート / dat 読み込みの部分はスキップ]-------------
#ifndef SNOWMAN
ch2->BigBuffer = apr_palloc(r->pool, ch2->zz_filesize); /* ←多分こんな形で BigBuffer 領域を確保してますよね? */
if (apr_file_open(&in,ch2->zz_fName,APR_READ,APR_OS_DEFAULT,r->pool)) {return 3011;}
apr_file_read(in, ch2->BigBuffer, &ch2->zz_filesize);
apr_file_close(in) ;
#endif
----------------------------------------------------------------------
420root▲ ★
2005/12/05(月) 22:42:24ID:???0 >>416
ちゃんと動いてるっぽいなぁ。
http://qb6.2ch.net/operate2/
http://qb6.2ch.net/operate2/html/1133790046.html
https:// と ftp:// は、もともと ime.st にならない仕様(ime.st側でちゃんと動かないので)。
ちゃんと動いてるっぽいなぁ。
http://qb6.2ch.net/operate2/
http://qb6.2ch.net/operate2/html/1133790046.html
https:// と ftp:// は、もともと ime.st にならない仕様(ime.st側でちゃんと動かないので)。
421root▲ ★
NGNG やってみました。
しかし、
Request exceeded the limit of 10 subrequest nesting levels
due to probable confguration error. Use 'LimitInternalRecursion'
to increase the limit if necessary. Use 'LogLevel debug'
to get a backtrace.
ううむ。
しかし、
Request exceeded the limit of 10 subrequest nesting levels
due to probable confguration error. Use 'LimitInternalRecursion'
to increase the limit if necessary. Use 'LogLevel debug'
to get a backtrace.
ううむ。
422root▲ ★
NGNG423▲ ◆cZfSunOs.U
2005/12/06(火) 02:18:11ID:iYd2v5pK0 >>421
>Request exceeded the limit of 10 subrequest nesting levels
>due to probable confguration error.
う〜む......サブリクエストが無限ループになってるんですかね......
proxy 関連の設定はどうなってますか?
>Request exceeded the limit of 10 subrequest nesting levels
>due to probable confguration error.
う〜む......サブリクエストが無限ループになってるんですかね......
proxy 関連の設定はどうなってますか?
424▲ ◆cZfSunOs.U
2005/12/06(火) 02:22:45ID:iYd2v5pK0 あと気になる点は......
・ ch2->zz_filesize の型 (apr_size_t? apr_off_t?)
・ ch2->BigBuffer[ch2->zz_filesize] に '\0' を置く必要あり?
・ ch2->zz_filesize の型 (apr_size_t? apr_off_t?)
・ ch2->BigBuffer[ch2->zz_filesize] に '\0' を置く必要あり?
425root▲ ★
NGNG >>424
> apr_size_t zz_filesize ;
のようです。
で、apr_file_close(in) の後は、
p = ch2->BigBuffer ;
for(i=0;i<ch2->zz_filesize;i++,p++)
{
if(*p == '\0') *p = '*' ;
}
*p = '\0' ;
p = ch2->BigBuffer ;
ch2->lineNum = 0 ;
と、やっている模様。
> apr_size_t zz_filesize ;
のようです。
で、apr_file_close(in) の後は、
p = ch2->BigBuffer ;
for(i=0;i<ch2->zz_filesize;i++,p++)
{
if(*p == '\0') *p = '*' ;
}
*p = '\0' ;
p = ch2->BigBuffer ;
ch2->lineNum = 0 ;
と、やっている模様。
426root▲ ★
NGNG >>423
> proxy 関連の設定はどうなってますか?
# livejupiter
ProxyPass /livejupiter/SETTING.TXT !
ProxyPass /livejupiter/ http://live22x.2ch.net/livejupiter/
ProxyPassReverse /livejupiter/ http://live22x.2ch.net/livejupiter/
です。
> proxy 関連の設定はどうなってますか?
# livejupiter
ProxyPass /livejupiter/SETTING.TXT !
ProxyPass /livejupiter/ http://live22x.2ch.net/livejupiter/
ProxyPassReverse /livejupiter/ http://live22x.2ch.net/livejupiter/
です。
427▲ ◆cZfSunOs.U
2005/12/06(火) 02:44:03ID:iYd2v5pK0 >>425 了解です.zz_filesize の型は良かったのですが,
>*p = '\0' ;
があるので apr_brigade_pflatten() のところはこうした方がよさそうです.
- apr_brigade_pflatten(f.ctx, &ch2->BigBuffer, &ch2->zz_filesize, r->pool);
+ apr_off_t blen;
+ apr_brigade_length(f.ctx, 1, &blen);
+ ch2->zz_filesize = blen;
+ ch2->BigBuffer = apr_palloc(r->pool, ch2->zz_filesize + 1);
+ apr_brigade_flatten(f.ctx, ch2->BigBuffer, &ch2->zz_filesize);
>>426 了解です.特に問題はなさそうですね.何が起こってるのかトレースできればいいんですが......
>*p = '\0' ;
があるので apr_brigade_pflatten() のところはこうした方がよさそうです.
- apr_brigade_pflatten(f.ctx, &ch2->BigBuffer, &ch2->zz_filesize, r->pool);
+ apr_off_t blen;
+ apr_brigade_length(f.ctx, 1, &blen);
+ ch2->zz_filesize = blen;
+ ch2->BigBuffer = apr_palloc(r->pool, ch2->zz_filesize + 1);
+ apr_brigade_flatten(f.ctx, ch2->BigBuffer, &ch2->zz_filesize);
>>426 了解です.特に問題はなさそうですね.何が起こってるのかトレースできればいいんですが......
428root▲ ★
NGNG430▲ ◆cZfSunOs.U
2005/12/06(火) 03:07:50ID:iYd2v5pK0 >>428 なるほど.とするとこんな感じですか......
apr_off_t blen;
apr_brigade_length(f.ctx, 1, &blen);
if ((ch2->zz_filesize = blen) >= SZ_BIGBUF)
return 何かのエラー番号;
apr_brigade_flatten(f.ctx, ch2->BigBuffer, &ch2->zz_filesize);
# デカい構造体をスタックに確保するってのはちょっと不安があるわけですが,
# 今までそれで動いてたのなら今回の問題とは無関係だろうということで......
で......死んだ時の core のバックトレースを取るとか,truss でトレースするとか
できますでしょうか......?
apr_off_t blen;
apr_brigade_length(f.ctx, 1, &blen);
if ((ch2->zz_filesize = blen) >= SZ_BIGBUF)
return 何かのエラー番号;
apr_brigade_flatten(f.ctx, ch2->BigBuffer, &ch2->zz_filesize);
# デカい構造体をスタックに確保するってのはちょっと不安があるわけですが,
# 今までそれで動いてたのなら今回の問題とは無関係だろうということで......
で......死んだ時の core のバックトレースを取るとか,truss でトレースするとか
できますでしょうか......?
431root▲ ★
NGNG 現在のもの:
+#ifdef SNOWMAN
+static apr_status_t rdat_filter(ap_filter_t *f, apr_bucket_brigade *b)
+{
+ return ap_save_brigade(f, (apr_bucket_brigade **)&f->ctx, &b, f->r->pool);
+}
+#endif
+#ifdef SNOWMAN
+ int rv;
+#if defined(AP_SERVER_MINORVERSION_NUMBER) && AP_SERVER_MINORVERSION_NUMBER >= 2
+ ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL, NULL, 0, 0};
+#else
+ ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL};
+#endif
+ ap_filter_t f = {&frec, NULL, NULL, r, r->connection};
+ char *uri = apr_pstrcat(r->pool, "/", ch2->zz_ita, "/dat/", ch2->zz_key, ".dat", NULL);
+ request_rec *rdat = ap_sub_req_lookup_uri(uri, r, &f);
+
+ if (!(rv = rdat->status == HTTP_OK ? ap_run_sub_req(rdat) : rdat->status)) {
+ apr_off_t blen;
+ apr_brigade_length(f.ctx, 1, &blen);
+ ch2->zz_filesize = blen;
+ apr_brigade_flatten(f.ctx, ch2->BigBuffer, &ch2->zz_filesize);
+ apr_brigade_destroy(f.ctx);
+ ch2->zz_mtime = rdat->mtime ? rdat->mtime
+ : apr_date_parse_http(apr_table_get(rdat->headers_out, "Last-Modified"));
+ }
+ ap_destroy_sub_req(rdat);
+
+ if (!rv) {
+ ch2->where = W_LIVE;
+ return 1;
+ }
+#else
(続く)
+#ifdef SNOWMAN
+static apr_status_t rdat_filter(ap_filter_t *f, apr_bucket_brigade *b)
+{
+ return ap_save_brigade(f, (apr_bucket_brigade **)&f->ctx, &b, f->r->pool);
+}
+#endif
+#ifdef SNOWMAN
+ int rv;
+#if defined(AP_SERVER_MINORVERSION_NUMBER) && AP_SERVER_MINORVERSION_NUMBER >= 2
+ ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL, NULL, 0, 0};
+#else
+ ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL};
+#endif
+ ap_filter_t f = {&frec, NULL, NULL, r, r->connection};
+ char *uri = apr_pstrcat(r->pool, "/", ch2->zz_ita, "/dat/", ch2->zz_key, ".dat", NULL);
+ request_rec *rdat = ap_sub_req_lookup_uri(uri, r, &f);
+
+ if (!(rv = rdat->status == HTTP_OK ? ap_run_sub_req(rdat) : rdat->status)) {
+ apr_off_t blen;
+ apr_brigade_length(f.ctx, 1, &blen);
+ ch2->zz_filesize = blen;
+ apr_brigade_flatten(f.ctx, ch2->BigBuffer, &ch2->zz_filesize);
+ apr_brigade_destroy(f.ctx);
+ ch2->zz_mtime = rdat->mtime ? rdat->mtime
+ : apr_date_parse_http(apr_table_get(rdat->headers_out, "Last-Modified"));
+ }
+ ap_destroy_sub_req(rdat);
+
+ if (!rv) {
+ ch2->where = W_LIVE;
+ return 1;
+ }
+#else
(続く)
433root▲ ★
NGNG if(ch2->zz_filesize > SZ_BIGMAX) return 3002 ;
だから、3002でいいのかな。
だから、3002でいいのかな。
434root▲ ★
NGNG ということで、今こうです。
結果は同じか。
で、core dumpとってみるです。
+#ifdef SNOWMAN
+ int rv;
+#if defined(AP_SERVER_MINORVERSION_NUMBER) && AP_SERVER_MINORVERSION_NUMBER >= 2
+ ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL, NULL, 0, 0};
+#else
+ ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL};
+#endif
+ ap_filter_t f = {&frec, NULL, NULL, r, r->connection};
+ char *uri = apr_pstrcat(r->pool, "/", ch2->zz_ita, "/dat/", ch2->zz_key, ".dat", NULL);
+ request_rec *rdat = ap_sub_req_lookup_uri(uri, r, &f);
+
+ if (!(rv = rdat->status == HTTP_OK ? ap_run_sub_req(rdat) : rdat->status)) {
+ apr_off_t blen;
+ apr_brigade_length(f.ctx, 1, &blen);
+ if ((ch2->zz_filesize = blen) >= SZ_BIGBUF)
+ return 3002;
+ apr_brigade_flatten(f.ctx, ch2->BigBuffer, &ch2->zz_filesize);
+ apr_brigade_destroy(f.ctx);
+ ch2->zz_mtime = rdat->mtime ? rdat->mtime
+ : apr_date_parse_http(apr_table_get(rdat->headers_out, "Last-Modified"));
+ }
+ ap_destroy_sub_req(rdat);
+
+ if (!rv) {
+ ch2->where = W_LIVE;
+ return 1;
+ }
+#else
結果は同じか。
で、core dumpとってみるです。
+#ifdef SNOWMAN
+ int rv;
+#if defined(AP_SERVER_MINORVERSION_NUMBER) && AP_SERVER_MINORVERSION_NUMBER >= 2
+ ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL, NULL, 0, 0};
+#else
+ ap_filter_rec_t frec = {"READDAT", {rdat_filter}, NULL, AP_FTYPE_RESOURCE, NULL};
+#endif
+ ap_filter_t f = {&frec, NULL, NULL, r, r->connection};
+ char *uri = apr_pstrcat(r->pool, "/", ch2->zz_ita, "/dat/", ch2->zz_key, ".dat", NULL);
+ request_rec *rdat = ap_sub_req_lookup_uri(uri, r, &f);
+
+ if (!(rv = rdat->status == HTTP_OK ? ap_run_sub_req(rdat) : rdat->status)) {
+ apr_off_t blen;
+ apr_brigade_length(f.ctx, 1, &blen);
+ if ((ch2->zz_filesize = blen) >= SZ_BIGBUF)
+ return 3002;
+ apr_brigade_flatten(f.ctx, ch2->BigBuffer, &ch2->zz_filesize);
+ apr_brigade_destroy(f.ctx);
+ ch2->zz_mtime = rdat->mtime ? rdat->mtime
+ : apr_date_parse_http(apr_table_get(rdat->headers_out, "Last-Modified"));
+ }
+ ap_destroy_sub_req(rdat);
+
+ if (!rv) {
+ ch2->where = W_LIVE;
+ return 1;
+ }
+#else
435▲ ◆cZfSunOs.U
2005/12/06(火) 03:16:17ID:iYd2v5pK0437root▲ ★
NGNG ううむ、core dumpしないみたいです。
[Mon Dec 05 10:25:09 2005] [notice] child pid 74701 exit signal Segmentation fault (11)
# XXX
CoreDumpDirectory /tmp
を、httpd.conf に書いたのですが。
[Mon Dec 05 10:25:09 2005] [notice] child pid 74701 exit signal Segmentation fault (11)
# XXX
CoreDumpDirectory /tmp
を、httpd.conf に書いたのですが。
438▲ ◆cZfSunOs.U
2005/12/06(火) 03:35:45ID:iYd2v5pK0439root▲ ★
NGNG440▲ ◆cZfSunOs.U
2005/12/06(火) 03:47:48ID:iYd2v5pK0 そうか.....httpd が最初に root で立ち上がってると OS のデフォルトでは
core 吐かないようになってるのかな......とすると,とりあえず直接 User
ディレクティブで指定してるユーザで立ち上げてみるとか......
core 吐かないようになってるのかな......とすると,とりあえず直接 User
ディレクティブで指定してるユーザで立ち上げてみるとか......
441root▲ ★
NGNG 302 みたいです。<= rdat->status
443root▲ ★
NGNG 200 だなぁ。ちゃんと。
444root▲ ★
NGNG core dumpしてるの、ここじゃないですね。
もっとあとみたい。
もっとあとみたい。
445root▲ ★
NGNG ap_rprintf(r, "%s\n", ch2->BigBuffer);
ってやっても、なんかちゃんと出ないみたい。
ってやっても、なんかちゃんと出ないみたい。
447root▲ ★
NGNG -funsigned-char しているせいかなぁ、、、。
448root▲ ★
NGNG strlen(ch2->BigBuffer) が、3らしい。ううむ。
449▲ ◆cZfSunOs.U
2005/12/06(火) 04:33:03ID:iYd2v5pK0 う〜む......原因もつかめないとすると......サブリクエスト方式をやめて
ソケットで localhost に取りに行く方式にした方がいいんですかねぇ.
read.cgi 1呼び出しごとに2プロセス消費することになっちゃいますが......
ソケットで localhost に取りに行く方式にした方がいいんですかねぇ.
read.cgi 1呼び出しごとに2プロセス消費することになっちゃいますが......
452root▲ ★
NGNG バッファを大域変数でとってみたけど、同じだった。
apr_brigade_flatten のところが、ちゃんと動いていない??
apr_brigade_flatten のところが、ちゃんと動いていない??
453▲ ◆cZfSunOs.U
2005/12/06(火) 04:47:52ID:iYd2v5pK0 ch2->zz_filesize はどうですか......?
454root▲ ★
NGNG http://live22x1.2ch.net/test/read.cgi/livejupiter/9240000003/
を読んで、
ap_rprintf(r, "%d\n", ch2->zz_filesize);
ってやったら、832 って出たです。
実際には、1428バイトあるですね。
を読んで、
ap_rprintf(r, "%d\n", ch2->zz_filesize);
ってやったら、832 って出たです。
実際には、1428バイトあるですね。
2005/12/06(火) 04:54:01ID:JNumL22n0
1f 8b 8 0はgzipか
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 【芸能】若林志穂「私は長渕剛氏を絶対に許さない。 私はあなたを許さない。許してあげようだなんて、微塵にも思わない」 [冬月記者★]
- 【話題】長谷川豊氏 笠井信輔アナの否定に反論「これが今回の本質」「今でも僕は思い出せます」★3 [ひぃぃ★]
- 【八潮市道路陥没】運転手の救出活動を再開…作業用スロープが完成し重機でがれきの撤去始める ★17 [Ailuropoda melanoleuca★]
- 国民民主党、「就職氷河期世代」支援に着手 参院選へ新看板政策「この世代の浮沈が日本経済を握っている」 [樽悶★]
- 【生活保護】申請したら役所が「処分してください」と拒否…「車」が“ぜいたく品”ではない切実な事情 ★2 [煮卵★]
- 笑福亭鶴瓶「歴史に残るとばっちり」ラジオ生出演でボヤく [muffin★]
- 【悲報】アメリカ人、疑問を持ち始める「なんでトランプは日本だけ関税を課さずに特別扱いしてるの?」 [705549419]
- 【朗報】郵政、事実上の再国有化へwwwwwwwwwwwwwwwwwwww [878970802]
- なんか日本「大人」がすごい勢いでバカになってきてない??陰謀論、感情論、エコーチェンバー、誹謗中傷… [535650357]
- 乳首コリコリコリアンダー🏡
- 彼女にプロポーズしたら断られたwwwwww
- お台場、もはや遊郭だった [819669825]