中田さん
私の場合は Win2000Pro + ActivePerl build 522ですが `cmd /c dir`でもだめです。
この組み合わせでも別のPCではperl.exeで問題なく動きましたので、私のPCが特殊なのと、
ActivePerlも問題ありなのかもしれません。
いとさん、
Win2000Pro + ActivePerl build 623 の perl.exe では、なぜか ls (dir /b) のようなファイル名のみの出力になりました。
`dir` ではなくて `cmd /c dir` では通常の dir の出力になります。
dir がコマンドシェルの内部コマンドなので、Perlの中で処理しているのかなと思いましたが、ちょっと変ですね。
中田さん、「投稿すべき問題」の続編です。
Win2000Proで試したところ PerlIS.dllで実行できましたが、perl.exeの方がダメです。
なぜかコマンドプロンプトからでも実行できません。中田さんの方ではどうでしたか?
もし同じ症状なら、AN HTTPD の問題ではないと思えますが。
なお、Win2000Server では perl.exeでも PerlIS.dllでもOKでした。
Win9xでは他のPCでも前回のコメント通り Win2000Proとは逆なので、摩訶不思議な現象です。
Ash さん、
訂正です。 WindowsNT/2000 では PerlIS.dllでちゃんと実行できました。
確認したのは、
WindowsNT4.0 + ActivePerl build 522/623
Windows2000Professional + ActivePerl build 623
です。
PerlIS.dll の仕様なのか、Windowsの問題なのか、AN HTTPD のISAPIの問題なのかあらためて調べてみます。
というわけでこれは「投稿すべき問題」でした。
いとさん、中田さん、ありがとうございました。
ISAPIがコマンドの呼び出しのできない仕様だとは判りませんでした。
こちらに投稿すべき問題ではありませんでした、申し訳ありません。
いつも IIS用スクリプトのローカルテストで AN HTTP Server を使わせて
頂いています。普段はセキュリティの事もありスクリプトからシステム
コマンドを使う事はないのですが、今回、Apache用スクリプトをwin環境で
テストするために、UNIX(LIKEな)コマンドが使えるフリーソフトを入れて、
スクリプト中のUNIXコマンドの動作を確認していたところ今回の問題が
発生してしまいました。次回からはもう少し慎重に投稿させて頂きます。
Ash さん、
CGIのPerlスクリプトは IE が実行するのではなく、HTTPサーバが perl.exe, PerlIS.dll を使って実行します。
バッククォートは system と同じく システムのコマンドを呼び出すものです。
PerlIS.dll(ISAPI)では、このコマンドの呼び出しはできない仕様になっていたと思います。
PerlIS.dllでは、他にもいくつか制限事項があるので、最初のうちは perl.exe を使うようにした方がよいでしょう。
もっとも、CGIスクリプトでシステムのコマンド呼び出しは、システムがWindowsかUNIXかによって動いたり動かなかったりしますから、それ自体あまり使わない方がよいと思います。
つまり `dir` を使いたい部分なら、Perlの opendir, readdir などを使うのがよいと思います。
> Ashさん
私の場合、環境は Win98 + ActivePerl 522ですが、実行プログラムが perl.exeなら表示され、
PerlIS.dllでは表示されないという結果になります。
ドライブ D: のボリュームラベルはありません.
ボリュームシリアル番号は 0964-07F6
ディレクトリは D:\httpd\cgi
. <DIR> 01-02-01 15:58 .Ashさん↑は、あなたのスクリプトを T.CGIで実行したものです。
.. <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 バイトの空きがあります.
はじめて質問させて頂きます。
CGIでのバッククォートの使用についてですが、
以下のスクリプトを実行すると、DOSプロンプトからは
動作しますが、IEで実行すると何も表示されません。
例えば `dir > $txt` とすると、IE からでも $txt
に該当するファイルには正常に書き込まれています。
バッククォートを使用するのに注意点等ありましたら、
ご教授お願い致します。
#-----------------------------------
print "Content-type: text/plain\n\n";
$out = `dir`;
print "$out";
exit;
#-----------------------------------