趣味でPerlによるCGIをやっています。
CGI出力結果と他のページとでヘッダーを共通化したいのですが、CGIファイル内にSSIの#include fileなどを挿入することはできるのでしょうか。
CGIファイルの中に print "<!--#include file="sample.html"-->\n";とするとそのままソースに書きこまれて出力されるだけで実行されないんですけど、、、なにかうまい方法はないでしょうか、お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

oneyanさんがおっしゃるとおり、


print "<!--#include file="sample.html"-->\n";
だと「"」のところで文字列が分断されてしまって
「裸の文字列(sample.html)があったよ」
という旨のエラーになりますね(Perl 5.6で確認)。
その場合出力もされないはずなので、多分質問なさるときに
写し間違えたのでしょう。

で、サーバがApacheの場合ですが、残念ながらできません。
(下記オフィシャルサイトのFAQ参照)
セキュリティの問題もあるし、および現在の仕組みではどのように
それを実現すればいいかはっきりしない、1.3の次のバージョン
で解決したい課題のひとつだ、とあります。

そして、代替手段としては「SSIにやってほしいことを、
あなたのスクリプト自体がやってしまうことです」と書いてありますね。

つまり、その個所でsample.htmlをインクルードしたいのなら、
その代わりに

open(SAMPLE, "sample.html");
while (<SAMPLE>) {
print;
}
close(SAMPLE);
と書いてしまうことです。さらに共通化するなら、上記のコードを
sub print_header {
....
}
なんていうサブルーチンにして別ファイルに保存しておき、
CGIでは適宜それをrequireしておいて、必要な個所でprint_headerを
呼び出す、なんて作り方もあり得るでしょうね。

…そこまでする必要ないかもしれませんが。まあ、SSIで
やってることはみんなこの手で、Perlスクリプト側で書いて
しまうのが良いかと。

参考URL:http://httpd.apache.org/docs/misc/FAQ.html#ssi-p …
    • good
    • 0
この回答へのお礼

ありがとうございます!たいへん勉強になりました。
ちなみにサーバーはAPACHEなので、できないんですね、、、
教えていただいたやり方を参考にやっていきたいと思います。

お礼日時:2001/06/12 00:03

とりあえず、CGIファイルからSSI起動は出来ます。


print "<!--#include file=\"sample.html\"-->\n";
で、行けるはずですが???
私が前やったときは、これでOKでした。
    • good
    • 0

直接Perlで、やったことはないので、


勘なのですが、

<!--#include file="sample.html"-->\n

の中の(")を(')、または無記入にしてみてください。

print "の(")をinclude file="の(")で、
閉じてしまっているような気がしました。

違ってましたらすみません。
(MacJPerl or AppleScriptの場合なので)

ただ、これだけですと<!-- -->でコメント化されて
しまうかもしれませんので、
SSIの効くHTMLを作って、頭の部分を丸々、print " "に
入れたほうが良いのでは?と思いました。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aと関連する良く見られている質問

QSSI - SSIで読み込んだファイルにさらにSSIの

QSSI #include virtual="~"

<!--#include virtual="~" -->
の「~」のところにhttp://で始まるURLをいれるとSSIが動きません。

<!-- #include file="http://****/***" -->
これもダメ。

<!--#include file="~" -->
にファイル名を入れるとSSIは動きます。

<!-- #include file="../**/***" -->
これも動きます。

私は何か勘違いをしていますか?

#windows2000サーバーです。

Aベストアンサー

SSI の include コマンドで URL は指定できません。

virtual で使用可能なファイルの指定形式は「相対パス」か「仮想パス(ドキュメントルートからのパス)」だけですので、読み込みたいファイルのURLが
  http://www.exsample.com/tmpl/footer.tmpl
だとすれば、
  <!--#include virtual="/tmpl/footer.tmpl"-->
と指定すればOKです。

file もファイルの指定方法に多少の違いがあるだけで、ほぼ同じです。

下記URLもご参考ください。
http://httpd.apache.org/docs/howto/ssi.html#includingastandardfooter
http://tohoho.wakusei.ne.jp/wwwssi.htm#Include

参考URL:http://httpd.apache.org/docs/howto/ssi.html#includingastandardfooter, http://tohoho.wakusei.ne.jp/wwwssi.htm#Include

SSI の include コマンドで URL は指定できません。

virtual で使用可能なファイルの指定形式は「相対パス」か「仮想パス(ドキュメントルートからのパス)」だけですので、読み込みたいファイルのURLが
  http://www.exsample.com/tmpl/footer.tmpl
だとすれば、
  <!--#include virtual="/tmpl/footer.tmpl"-->
と指定すればOKです。

file もファイルの指定方法に多少の違いがあるだけで、ほぼ同じです。

下記URLもご参考ください。
http://httpd.apache.org/docs/howto/ssi.html#includingas...続きを読む

QSSI(Server Side Include)って、今でも良く使われるのでしょうか?

SSI(Server Side Include)って、今でも良く使われるのでしょうか?

HP作成の初心者です。
SSIを利用したページを作りたいと思ってますが、最近の雑誌など見てもSSIの話題が少ない気がして、今でも使われている手法なのかそれともすたれてきているのか心配です。

最近の動向などどうなのでしょうか?
アドバイスなど何でも結構です。 是非、教えて下さい。

Aベストアンサー

SSIは「ちょっとしたこと」には便利ですが、
最近のホームページはかなりこった物(CMS)が標準的に作られる(使われる)ようになり、
「ちょっとしたこと」しかできないSSIでは間に合わないことが多いと思います。

Perlからは、条件付きでSSIコマンドを利用できるようにはなりますが、そのままPerlで書く方が一般的だと思います。

QSSI で .cgi は引けますが・・

<!--#exec cgi="xx.cgi" -->

で掲示板や投票などのCGIを表示することはできますが、
実際に投稿や投票などをすると「404 Not Found」になってしまいます。

単体でCGIを実行(投稿・投票)する分には、何の問題もなくできますが・・。
何が原因となっているのでしょうか?よろしくお願いします。

Aベストアンサー

勘で答えますが
cgiのURLが http://example.com/~tarou/test/test.cgi だった場合
<FORM ACTION="/~tarou/test/test.cgi" と指定したらどうですか?
 (http仮想パスとしての絶対パスです)

QSSIでCGIを起動するには…

同じ質問をしてましたが、回答がなかった為、カテを変えて質問します。

SSIを使いフレームみたいなページを作りました。
左側のメニューページをSSIで呼び出し、実行と言った感じです。
それで、掲示板などのCGIを右側のページに呼び出そうと思ったのですが、どうやっても出来ません。
画面は一応は呼び出せるのですが、画面がぐちゃぐちゃになっていて、そのCGIの書き込みすら出来ない状態です。
また、CGIを表示するHTMLを呼び出しても同じ結果でした…。
パーミションは変更しています。
またインラインフレームでは表示、書き込みは可能なのですが、
なんとかSSIで表示できないものかと悪戦苦闘です^^;

この様な場合、どうすれば良いのか教えてください!!
もしくは、設置に関するwebページなどがあったら教えてください!!

Aベストアンサー

#1です。
改造方法はCGIで結果を出力する部分から不要な部分、
先頭から<body>と</body></html>をカットするのが基本ですが、
<head>部分にjavascriptやcssなどあるなら不要とはいえず、
それらを元のHTML(SSIを各側)に移す必要はあります。

SSI以外で思いつくのは掲示板のスクリプトで、
SSI用に別ファイルにしてあるメニュー部分を読み込んでしまう(SSIでやってる事も代行する)のが効率もいいし、
改造も簡単な可能性があります。(私がやるならたぶんこちら)

それなりに広い知識が必要になるので掲示板の改造の自身がないなら、
iframeを使うのが手軽で確実な手法だと思います。
(これを機に勉強するのも無駄にはならないと思いますが。)


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報