• ベストアンサー
  • すぐに回答を!

ローカルサーバーでの動作確認

  • 質問No.751215
  • 閲覧数142
  • ありがとう数3
  • 気になる数0
  • 回答数5
  • コメント数0

お礼率 56% (23/41)

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" -->の部分が表示されてませんでした.

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

質問者が選んだベストアンサー

  • 回答No.5
  • ベストアンサー

ベストアンサー率 40% (201/496)

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

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

#今はほとんどPHPを使っているのでSSIは使わなくなりましたが..
お礼コメント
sadamon

お礼率 56% (23/41)

回答ありがとうございます。
なんとか動作確認できました.
もっと勉強します.
投稿日時:2004/01/24 00:19

その他の回答 (全4件)

  • 回答No.4

ベストアンサー率 41% (74/180)

> 単純に <!--#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ならデフォルト状態でも動作したはず)
補足コメント
sadamon

お礼率 56% (23/41)

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

ActivePerl5でapacheは1.3.29です.

全くどうしたものか… やっぱりバグですか?
ただ参考書で使用してるapacheは1.3.27なのでそんなに仕様が変わってるとは思えないんですが。
投稿日時:2004/01/15 21:22
  • 回答No.3

ベストアンサー率 40% (201/496)

#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)ではバグ(もしくは仕様??)で動作しないんだと思います。
補足コメント
sadamon

お礼率 56% (23/41)

回答ありがとうございます.
下の方法でやってみたらチャンと表示されました。
でもこれはSSIではないんですね?
apacheは1.3.29なんですけどやっぱりバグなんでしょうか…
投稿日時:2004/01/15 21:05
  • 回答No.2

ベストアンサー率 40% (201/496)

まず、test.pl の方で、print "hello!";を実行する前に
print "Content-type: text/html\n\n";
を入れてください。htmlを出力する時のおまじないです。

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

ベストアンサー率 41% (74/180)

Apacheであれば logs というディレクトリがあるかと思いますが、
そこの error.log になにかエラーが記録されていませんか?
補足コメント
sadamon

お礼率 56% (23/41)

回答ありがとうございます.
「logs」ディレクトリありますが
ごめんなさい、これってエディターで開いていいんでしょうか…
投稿日時:2004/01/15 21:03
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ