新規記事投稿
フォロー記事投稿
記事のキャンセル
From: にあ
<nir@mvg.biglobe.ne.jp>
Subject: Re: 「I=npc.idx」が必須なのはなぜ?
Date: 2000/11/29 22:37:55
Reference: mesh.npc.2/00874
11月29日に、伊藤さんは書きました。
>>出すときに、オプションに「I=npc.idx」が無いと「BAD npc.idx File」というエラーになっ
>
>このエラーメッセージですが、正確に言うと以下のようになっています。
>
>/home/..(中略)../cgi-bin/npc.cgi(1): BAD npc.idx File
>
>これは「I=」オプションを使用しないときの定義ファイルのデフォルト値が、何故かnpc.idxで
>はなくnpc.cgiになっているとではないでしょうか? そしてnpc.cgiを設定ファイルと勘違い
>して読み込みをするが設定ファイルではないのでエラーを出したということに考えられます。
確かに、/home/.../cgi-bin/npc.cgi を設定ファイルと思って呼んでいますね。
>素人考えですがRaQ3がCGIWrap経由でCGIを実行していることが原因でしょうか?
おそらく、CGI Wrapper から npc.cgi への呼び出しを、
/.../cgiwrap/USERID/cgi-bin/npc.cgi?...
のような形式で行っているのじゃないか、と思うのですが、どうでしょうか?
npc.cgi からの設定ファイル指定には I=... 以外にも PATH_INFO 形式でも出来るのですが、
CGI Wrapper から npc.cgi の呼び出しに PATH_INFO 形式を使っているため、その時の情報が
npc.cgi にも渡ってしまい、npc.cgi 自身のパスを設定ファイルと思ってしまったようですね。
I=... のオプション設定をすれば、デフォルトの PATH_INFO による設定に優先されますから
正常な設定ファイルが読めた、という事でしょう。
もしも、PATH_INFO による設定を無視させたいなら、param.c の 108〜111 行にある、
| if (((str = getenv("PATH_INFO")) != NULL) && (*str != EOS)
| && ((str = getenv("PATH_TRANSLATED")) != NULL) && (*str != EOS)) {
| env.index = new_str(str);
| }
の部分を削除してしまえば良いです。
そうでないなら、毎回 I=... を書く必要がありますね。
# この頃、CGI Wrapper では無く、SuEXEC によりユーザ権限へ移行するのが一般的に
# なってしまったので、あまり PATH_INFO がらみのトラブルは聞かなくなりましたね。(^^)