AN HTTPD ゲストブック/コメント集(2001年2月3日16:01)


いと gfh05223@nifty.com 2001/02/08 22:07

中田さん
私の場合は Win2000Pro + ActivePerl build 522ですが `cmd /c dir`でもだめです。
この組み合わせでも別のPCではperl.exeで問題なく動きましたので、私のPCが特殊なのと、
ActivePerlも問題ありなのかもしれません。


中田昭雄 nakata@st.rim.or.jp 2001/02/07 21:03

いとさん、
Win2000Pro + ActivePerl build 623 の perl.exe では、なぜか ls (dir /b) のようなファイル名のみの出力になりました。
`dir` ではなくて `cmd /c dir` では通常の dir の出力になります。
dir がコマンドシェルの内部コマンドなので、Perlの中で処理しているのかなと思いましたが、ちょっと変ですね。


いと gfh05223@nifty.com 2001/02/06 23:23

中田さん、「投稿すべき問題」の続編です。

Win2000Proで試したところ PerlIS.dllで実行できましたが、perl.exeの方がダメです。
なぜかコマンドプロンプトからでも実行できません。中田さんの方ではどうでしたか?
もし同じ症状なら、AN HTTPD の問題ではないと思えますが。

なお、Win2000Server では perl.exeでも PerlIS.dllでもOKでした。
Win9xでは他のPCでも前回のコメント通り Win2000Proとは逆なので、摩訶不思議な現象です。


中田昭雄 nakata@st.rim.or.jp 2001/02/05 21:13

Ash さん、
訂正です。 WindowsNT/2000 では PerlIS.dllでちゃんと実行できました。
確認したのは、
WindowsNT4.0 + ActivePerl build 522/623
Windows2000Professional + ActivePerl build 623
です。

PerlIS.dll の仕様なのか、Windowsの問題なのか、AN HTTPD のISAPIの問題なのかあらためて調べてみます。

というわけでこれは「投稿すべき問題」でした。


Ash mhashi@mxb.mesh.ne.jp 2001/02/04 20:34

いとさん、中田さん、ありがとうございました。

ISAPIがコマンドの呼び出しのできない仕様だとは判りませんでした。
こちらに投稿すべき問題ではありませんでした、申し訳ありません。

いつも IIS用スクリプトのローカルテストで AN HTTP Server を使わせて
頂いています。普段はセキュリティの事もありスクリプトからシステム
コマンドを使う事はないのですが、今回、Apache用スクリプトをwin環境で
テストするために、UNIX(LIKEな)コマンドが使えるフリーソフトを入れて、
スクリプト中のUNIXコマンドの動作を確認していたところ今回の問題が
発生してしまいました。次回からはもう少し慎重に投稿させて頂きます。


中田昭雄 nakata@st.rim.or.jp 2001/02/04 17:44

Ash さん、
CGIのPerlスクリプトは IE が実行するのではなく、HTTPサーバが perl.exe, PerlIS.dll を使って実行します。

バッククォートは system と同じく システムのコマンドを呼び出すものです。
PerlIS.dll(ISAPI)では、このコマンドの呼び出しはできない仕様になっていたと思います。
PerlIS.dllでは、他にもいくつか制限事項があるので、最初のうちは perl.exe を使うようにした方がよいでしょう。

もっとも、CGIスクリプトでシステムのコマンド呼び出しは、システムがWindowsかUNIXかによって動いたり動かなかったりしますから、それ自体あまり使わない方がよいと思います。
つまり `dir` を使いたい部分なら、Perlの opendir, readdir などを使うのがよいと思います。


いと gfh05223@nifty.com 2001/02/04 14:28

> Ashさん
私の場合、環境は Win98 + ActivePerl 522ですが、実行プログラムが perl.exeなら表示され、
PerlIS.dllでは表示されないという結果になります。


yama y_izumi@mtj.biglobe.ne.jp 2001/02/03 22:33

ドライブ D: のボリュームラベルはありません.
ボリュームシリアル番号は 0964-07F6
ディレクトリは D:\httpd\cgi

.              <DIR>        01-02-01  15:58 . 
.. <DIR> 01-02-01 15:58 ..
CGISAM~1 HTM 1,608 01-02-02 16:48 cgisample.html
A HTM 511 01-02-02 16:50 a.htm
T CGI 80 01-02-03 22:18 t.cgi
3 個 2,199 バイトのファイルがあります.
2 ディレクトリ 1,875,931,136 バイトの空きがあります.
Ashさん↑は、あなたのスクリプトを T.CGIで実行したものです。
ディレクトリの様子がよく分かりますね(^_-)
いろいろと学習しています。
表示されるか,されないのか,どこの設定でそうなるのか
私も教えていただきたいものです。


Ash mhashi@mxb.mesh.ne.jp 2001/02/03 16:01

はじめて質問させて頂きます。
CGIでのバッククォートの使用についてですが、
以下のスクリプトを実行すると、DOSプロンプトからは
動作しますが、IEで実行すると何も表示されません。
例えば `dir > $txt` とすると、IE からでも $txt
に該当するファイルには正常に書き込まれています。
バッククォートを使用するのに注意点等ありましたら、
ご教授お願い致します。

#-----------------------------------
print "Content-type: text/plain\n\n";
$out = `dir`;
print "$out";
exit;
#-----------------------------------