• 締切済み

SSIの表示

perl/cgiの勉強中でssiでhtmlへの埋め込みを行いたいのですが、何故か出力が2度されてしまいます。 以下実行プログラムと結果です。 [test.cgi] #!/usr/bin/perl -w use strict; use warnings; print "Content-type:text/html\n\n"; print "hoge"; exit; [test.shtml] <html> <head></head> <body> <!--#include virtual="/cgi-bin/test.cgi"--> </body> </html> [出力] hogehoge …となってしまいます。どなたかご教示願えませんでしょうか? よろしくお願いいたします。

みんなの回答

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.3

> CGIプログラムを実行する場合でも#include virtualでいいです。 間違いのご指摘,ありがとうございます。 includeというのはそういう動作じゃないと,試してもいないで頭の中だけですっかりそう思い込んでいました。失礼しました。

回答No.2

質問文のコードを見た限りでは2重に表示されるとは思えません。 (ためしに、質問文のコードをコピーして、表示テストを行ってみてください。) 質問文に書いていない、どこか別の部分に原因があるのではないでしょうか。 --------------- http://httpd.apache.org/docs/2.2/howto/ssi.html#basic CGIプログラムを実行する場合でも#include virtualでいいです。 #execは一般のレンタルサーバーでは使用禁止になっていると思います。 #include fileはvirtualに対して、『上位ディレクトリを指定できない』『includeするファイルがSSIで処理可能なファイルの場合でも、SSIを実行しない』という制限があります。 test.shtml <p>now: <!--#echo var="DATE_LOCAL" --></p> index.shtml <!-- #include file="test.shtml" -->(test.shtmlのSSIを実行せずファイルの通りに出力する) <!-- #include virtual="test.shtml" -->(現在時刻が表示される) #include fileは入れ子になったSSIを実行しませんから、サーバーの負荷を少しだけ減らす事が出来ます。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.1

#includeと実行プログラム,という点がそもそもの間違いです。 http://www.tohoho-web.com/wwwssi.htm #includeコマンドでファイルの中身を埋め込みたいなら, <!--#include virtual="/test.txt" --> などとして,"/test.txt"の中身は次のようなただ一行でよいでしょう。 [test.txt] hoge プログラムの実行結果を埋め込みたいなら#execコマンドですが, <body>の中に埋め込む文字列 hoge だけをプログラムで生成したいなら, それはCGIプログラムではありませんから, <!--#exec cmd="/cgi-bin/test.pl" --> などとして,Content-type行はprintしないことになります。 .shtmlファイル内にCGIプログラム起動の指示を書きたいなら, <!--#exec cgi="/cgi-bin/test.cgi" --> でしょうけれど,であるならHTMLタグの出力もtest.cgiでおこなってください。 ということで。 SSIを用いてhogeとだけWeb画面に表示する方法は1つではなく複数あります。 質問者はどういうやり方でそれを実現したいのでしょう。

関連するQ&A