プロが教える店舗&オフィスのセキュリティ対策術

CGI超初心者です.
翔泳社のPERL/CGI辞典を見ながらCGIに挑戦してます.
今ローカルサーバーでの動作確認すべく奮闘しているのですがCGI/SSIを使用するためのAPACHEの設定で頭を悩ませてます.
CGIはうまく表示できたのですがどうしてもSSIが表示されないのです.
ファイルは本通りに記述したつもりです.

「test.shtml」
<HTML>
<BODY>
<!--#exec cmd="test.pl" -->
</BODY>
</HTML>

「test.pl」
#!C:\perl\bin\perl

print"hello!";


CGI/SSIはドキュメントルートで制限なく使用できるよう設定しました.
test.shtmlは表示されてるようなんですがそこにtest.plが読み込めてないようです(よく分かりませんが…)
どこが悪いのか全く分かりません.
ブラウザ上でこのtest.shtmlのソースを確認したら<!--#exec cmd="test.pl" -->の部分が表示されてませんでした.

全くの初心者でどのような情報を開示すればよいのか分からないので必要な情報があれば教えていただけるとありがたいです.

A 回答 (5件)

> でもこれはSSIではないんですね?


Server Side Include といういみでは、cmd でも cgiでもSSIとして動作しているということですよ。
cmd/cgiのどちらを利用するかはあまり明確な切り分けは無いと思います。強いて言うなら、cmd はコマンドやシェルスクリプト(バッチファイル?)の実行結果を表示するときに、cgiはプログラムの実行結果を表示するとき、というぐらじゃないでしょうか。
今回の test.plを自分でどちらに意味づけするかでcmd/cgiどちらを使うかを決めるだけだと思います。

私はここで SSIの使い方を勉強しました
http://www.hotwired.co.jp/webmonkey/2000/04/inde …
http://www.hotwired.co.jp/webmonkey/2000/05/inde …
#include file/virtualの他にも#if/#else/#endifは結構便利に使えました。

#今はほとんどPHPを使っているのでSSIは使わなくなりましたが..

参考URL:http://www.hotwired.co.jp/webmonkey/
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
なんとか動作確認できました.
もっと勉強します.

お礼日時:2004/01/24 00:19

> 単純に <!--#exec cmd="dir" --> としても動かなかったのですから、Apache2(最新版2.0.48)ではバグ(もしくは仕様??)で動作しないんだと思います。


もしかするとexecはセキュリティ上あまりよろしくないので仕様が変更されたのかな?
参考書が古かったりすると、動かないことがあるかもしれませんね。

代替でこれ↓はどうですか?
<!--#include virtual="/cgi-bin/test.pl"-->

あと、念のために確認しますが、
1) htdocsのディレクティブに Includes もしくは IncludesNOEXEC を追加していますか?
2) AddTypeで .shtml を有効にしていますか?
 AddType text/html .shtml
 AddOutputFilter INCLUDES .shtml

たしかデフォルトでは *.pl はCGIとして動作しなかった記憶があるのですが、そこもちゃんと設定済みですか?
(*.cgiならデフォルト状態でも動作したはず)

この回答への補足

回答ありがとうございます。
代替の記述でトライしてみましたがやっぱりだめでした。
ちなみに
1)のhtdocsにIncludesの記述は追加してます.
2)3行目のAddOutputFilter~の記述の代わりにAddHandler~の設定があってそれは有効にしてます.

ActivePerl5でapacheは1.3.29です.

全くどうしたものか… やっぱりバグですか?
ただ参考書で使用してるapacheは1.3.27なのでそんなに仕様が変わってるとは思えないんですが。

補足日時:2004/01/15 21:22
    • good
    • 0

#2の補足です。



> print "Content-type: text/html\n\n";
これは cgiとして動作させるときのものでした。cmdとして実行させる場合はいらない行です。

> exec cmdでうまく行かない場合
Win32では、この exec cmd の実装バグがいろいろあるようです。1.3系でも動作する場合と動作しない場合があるようです。2.0は少なくとも私の環境では動きませんでした。
単純に <!--#exec cmd="dir" --> としても動かなかったのですから、Apache2(最新版2.0.48)ではバグ(もしくは仕様??)で動作しないんだと思います。

参考URL:http://www.google.com/search?q=exec+cmd+apache+w …

この回答への補足

回答ありがとうございます.
下の方法でやってみたらチャンと表示されました。
でもこれはSSIではないんですね?
apacheは1.3.29なんですけどやっぱりバグなんでしょうか…

補足日時:2004/01/15 21:05
    • good
    • 0

まず、test.pl の方で、print "hello!";を実行する前に


print "Content-type: text/html\n\n";
を入れてください。htmlを出力する時のおまじないです。

あと、ちょっと理由がわからなかったのですが、exec cmdでうまく行かない場合 exec cgiにしてみてください。
exec cmdで試したのですが、私の環境 Win2k Apache2 Perl5 では動作しなかったので...。
    • good
    • 0

Apacheであれば logs というディレクトリがあるかと思いますが、


そこの error.log になにかエラーが記録されていませんか?

この回答への補足

回答ありがとうございます.
「logs」ディレクトリありますが
ごめんなさい、これってエディターで開いていいんでしょうか…

補足日時:2004/01/15 21:03
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!