AN HTTPD ゲストブック/コメント集(2002年9月1日02:43)


中田昭雄 nakata@st.rim.or.jp 2002/10/07 21:11

重複登録は拡張子の方をレジストリの名前にしてしまっているので、その方式を変えないとだめですね。


いと gfh05223@nifty.com 2002/10/07 20:51

> CGI実行プログラムの重複登録の場合、先頭のチェックを見ない
重複登録して簡単に切り替えが可能になりました。ただ、以前書いたように
http://homepage1.nifty.com/yito/namazu/gbook/20020901.0243.html
拡張子の部分が全く同じ設定のときに AN HTTPDの再起動で一方が削除されます。
重複を許すのであれば削除はしない方がいいかと思いますが。


アセロラ あせろら 2002/09/04 23:09

こんばんは、中田さん。
お返事ありがとうございます。

>アセロラさんに検証してもらうのはちょっと酷なような気もしますし、そこまで調べていただいたので、あとは私が確認して直します。
よろしくお願いします。 

下記は、今日試してみた二重登録ではないローカルでの結果です。
 引数 | パス |.exe | .Dll
 cgi | 絶対 | × |  ×
 cgi | 相対 | ○ |  ○
 cmd | 絶対 | ○ |  ×
 cmd | 相対 | ○ |  ○


中田昭雄 nakata@st.rim.or.jp 2002/09/04 21:02

アセロラさん、
CGIやSSIでは「絶対パス」といっても2通りあります。
URLパス(仮想パス)の絶対パス と ローカルパスの絶対パス の2通りです。
#exec cgi と #exec cmd ではこの違いで動作が変わってきますから、単に○×というわけにはいきません。つまり、不適当な絶対パスを指定すれば×で当然ということになります。

といっても、それをアセロラさんに検証してもらうのはちょっと酷なような気もしますし、そこまで調べていただいたので、あとは私が確認して直します。

今までの話から .exe と .dll を両方登録してチェックで使い分ける場合にバグがあるのは明らかで、まずそれを直さないといけないわけですが、それが重なって症状が複雑になっているようです。


アセロラ あせろら 2002/09/04 15:27

こんにちは、中田さん。
お返事ありがとうございます。

>「.htmlファイル」というのは SSI の #exec という意味なのでしょうね(?)。
はい。そうです。前回の下書きした時には、「.htmlファイル」と、「表示する」の間に「<SSI>」を入れていたのですが、投稿したら消えてしまっていました。

今日、改めて確認してみました。

1番目  cgi=絶対パス → ×   cmd=絶対パス → ○
      =相対パス → ○     =相対パス → ○
2番目  cgi=絶対パス → ×   cmd=絶対パス → ×
      =相対パス → ○     =相対パス → ○
3番目  cgi=絶対パス → ×   cmd=絶対パス → ○
      =相対パス → ○     =相対パス → ○
4番目  cgi=絶対パス → ×   cmd=絶対パス → ×
      =相対パス → ×     =相対パス → ×
*コマンドはexecです。

−いとさんへ−
確認ありがとうございました。
2番目は逆の結果になってしまいました。SSIの説明書などをみても「絶対パスを、、、」と書いてあるだけに、どうやら、ここの環境だけでの結果に至るみたいです。


いと gfh05223@nifty.com 2002/09/03 21:50

アセロラさんの4番目のケースで SSIが表示されない件ですが、
実は2番目も表示されていないということはありませんか?

以前、SSIのカウンタスクリプトで exe なら動作するが ISAPI では
だめという経験をしました。そのときはスクリプトの中のパスを
以下のように相対パスから絶対パスに書き直せば無事動作しました。

$basedir = './count/';      → perl.exe:〇, PerlIS.dll:× 
 ↓
$basedir = 'c:/www/count/'; → perl.exe:〇, PerlIS.dll:〇
2番目のケースで表示されるのなら無関係でしょうし、他のスクリプトが
どうかは確認していませんので、参考程度にということで。


中田昭雄 nakata@st.rim.or.jp 2002/09/03 21:10

アセロラさん、
「.htmlファイル」というのは SSI の #exec という意味なのでしょうね(?)。
SSIでは指定どおりに動作するけれども、CGIでは(いとさんが言うとおり)先頭のチェックの有無にかかわらず下に指定したものが使われてしまう、ということですね。
確認して直します。


アセロラ あせろら 2002/09/03 02:51

いとさんの結果もふまえてPerlに関してまとめて見ました。
見ずらいかもしれませんが4パターンの設定とその設定で各ファイルをブラウズした結果です。 

v Perl.exe 
 PerlIS.dll 
.htmlファイル<SSI> 表示される  Process.log  Perl.exe
.cgiファイル    表示される  Process.log  PerlIS.dll

 Perl.exe
v PerlIS.dll
.htmlファイル<SSI> 表示される ログ PerlIS.dll
.cgiファイル    表示される ログ PerlIS.dll 

 PerlIS.dll
v Perl.exe
.htmlファイル<SSI> 表示される ログ Perl.exe
.cgiファイル    表示される ログ Perl.exe

v PerlIS.dll
 Perl.exe
.htmlファイル<SSI> 変数のみ表示され.cgiファイルは表示されない ログ PerlIS.dll
.cgiファイル    表示される ログ Perl.exe
process.logにPerlIS.dllで残っているとisapi.logにも残りますが、4番目のパターンの .htmlファイルを見たときはisapi.logには残りませんでした。

−いとさんへ−
確認ありがとうございました。
それから、AnHTTPDの再起動時に一つが削除され、空になる現象もたまにありました。

#また、前に詰まってしまうかもしれません、、、


いと gfh05223@nifty.com 2002/09/03 00:31

私がテストした結果では、同じ拡張子が複数定義されていて
どれにもチェックがないとダウンロードになりますが
少なくとも一つチェックがあると一番下の設定が選択される
ようです(たとえそこにチェックがなくても)。
前の例では必ず PerlIS.dll、php4isapi.dll が実行されます。

なお、アセロラさんの例示のように拡張子の並びが全く同じだと
AN HTTPDの再起動時に一つが削除されてしまい、空行になるので
わざわざ一方に .dummyを加えました。


アセロラ あせらら 2002/09/02 23:19

訂正:すみません。投稿したら前に詰まってしまったようです。

  拡張子  |   実行プログラム      | 般 | PT | #! | exe |  
.pl,.cgi C:\Perl\bin\perl.exe   v
v .pl,.cgi C:\Perl\bin\perlIS.dll v
.php,.phtml C:\PHP\php.exe v v
v .php,.phtml C:\PHP\sapi\php4isapi.dll v v
また詰まってしまったらごめんなさい。

.dllだけにチェックしているのにprocess.logには.exeになります。PHPの方では逆に.exeにチェックしているのに.dllでログが残る時もあります。


アセロラ あせろら 2002/09/02 22:56

こんばんは、中田さん。お返事ありがとうございます。

ActivePerl 5.6.1 build 631   PHP 4.2.2    AN HTTPD 1.40c

v SSIを許可する : □/index.html □*.shtml v *.html 
v CGIを許可する □NPHスクリプトではサーバから接続を切る

  拡張子  | 実行プログラム | 般 | PT | #! | exe |
.pl,.cgi C:\Perl\bin\perl.exe  v
v .pl,.cgi C:\Perl\bin\perlIS.dll v
.php,.phtml C:\PHP\php.exe v v
v .php,.phtml C:\PHP\sapi\php4isapi.dll v v
CGI/SSI プロセス制御: v 単一スレッド     □ヘルパープロセス
             v CGI出力を検査     v SSI出力を検査
ISAPIタイムアウト 20秒  接続持続タイムアウト 15秒

上記の設定でlocalhostへ下記のファイルにアクセスしました。

top.html (SSIでアクセスカウンタや、変数で時刻を表示させてます。)
bbs.cgi (フリーの掲示板で、top.htmlとリンクしてます。)
pbbs.php (フリーの掲示板で、top.htmlとリンクしてます。) 
info.php (よく動作確認に使われているinfoスクリプトです。単一で使いました。)


中田昭雄 nakata@st.rim.or.jp 2002/09/02 21:08

アセロラさん、
どこにどういうチェックを入れた時の話なのかが、まだよくわかりません。
省略せずに説明してもらえますか(?)。

たとえば、いとさんの説明通りの設定で、

  .pl,.cgi        C:\Perl\bin\perl.exe    
v .pl,.cgi,.dummy C:\Perl\bin\PerlIS.dll
 .php C:\php\php.exe
v .php,.dummy C:\php\sapi\php4isapi.dll
とした時も、perl.exe や php.exe で実行してしまう、という意味でしょうか?


アセロラ あせろら 2002/09/02 00:03

こんばんは、中田さん。お返事ありがとうございます。

>、、、具体的にどう設定しているのか、、、
すみませんでした。
いとさんのフォローの通りで、Perlの方には【般】にPHPの方には【般】と【PT】にチェックを入れています。

−いとさんヘ− 
フォローありがとうございました。

#余談# 以前、メールアドレスを書いたら、中国語?韓国語?らしきメールを沢山いただきましたが、僕は読めないので申し訳ありませんがせめて英語でよろしくお願いします。


いと gfh05223@nifty.com 2002/09/01 12:55

アセロラさんの「両方登録した状態」というのは
例えば以下のような設定ではないでしょうか。

v .pl,.cgi        C:\Perl\bin\perl.exe 
.pl,.cgi,.dummy C:\Perl\bin\PerlIS.dll
v .php C:\php\php.exe
.php,.dummy C:\php\sapi\php4isapi.dll
チェックのオン/オフ変更だけでexeとISAPIが切り替わると楽
ということかと思います。
私は Perlの方は select できるので現状で不満はありませんが、
phpの方はせめて selectができればいいなと思うことはありますね。


中田昭雄 nakata@st.rim.or.jp 2002/09/01 07:22

アセロラさん、
「両方登録した状態」というのがどういう意味かよくわかりません。
拡張子、実行プログラムのところを具体的にどう設定しているのかお知らせください。


アセロラ あせろら 2002/09/01 04:08

訂正&追記です。
>.exeと.dll(ISAPI)を両方追加登録して使用すると.exeの方が優先されログに残りました。
(この時、双方共に実行するにチェックは入っています。)
優先されたわけではなく実際に.exeの方を使っているみたいですね。

両方登録した状態で.dllだけ実行するにチェックを入れて使うときに双方ともに【般】にチェックしています。で、.cgiファイルにアクセスすると症状が確認できると思います。

それから、.htmlファイルなどにSSIで.cgiを使用する場合だと.dllでログに残りました(実行はされた??)が、表示されませんでした。ただし、SSIの変数は表示されました。


アセロラ アセロラ 2002/09/01 02:43

こんばんは、中田さん。

process.logに関してです。
PerlとPHPを使用するにあたって、.exeと.dll(ISAPI)を両方追加登録して使用すると.exeの方が優先されログに残りました。その場合はいた仕方ないかもしれませんが、双方登録した状態で、.exeのチェックをはずし.dllを使ってもログには.exeで残ります。これは実際には.exeを使っているためなのでしょうか?
.dllのログを残すには.exeの登録を削除しないとダメでした。