• ベストアンサー

CGIにSSIカウンタをつけたい

掲示板や日記帳などのCGIに、別途ダウンロードしたSSIのテキストカウンタを表示させようとしたところ、ローカル・Web共に表示されませんでした。 表示する為の記述は「<!--#include virtual="仮想パス"-->」で、HTMLファイルに記述した場合は問題なく表示・動作しました。 HTMLファイルで表示・動作しましたし、CGI・SSI・「.htaccess」ファイルなどの設定はおそらく問題ありません。 SSIのテキストカウンタは「The Room」というサイトの「Text Day Counter Ver.1.10 SSI版」を使用しています。 CGIは「掲示板や日記帳など」と言いましたが、まだ検討段階で特定のCGIはなく、色々なCGIで試しています。 ※特定のものだけではなく、テキストカウンタを表示したいと思うCGIにつけたいのです。 CGIの記述は (1) print "<!--#include virtual=\"仮想パス\"-->\n" ; (2) print '<!--#include virtual="仮想パス"-->\n' ; (3) print "<!--#include virtual='仮想パス'-->\n" ; (4) print <<"EOM"; <!--#include virtual="仮想パス"--> EOM と4通り試しましたが、どれも動作しませんでした。 SSIのテキストカウンタのパスが「http://xxx.yyy.zzz/aaa/bbb/ccc/txtdayc1.cgi」だとしたら、仮想パスは「/aaa/bbb/ccc/txtdayc1.cgi」のようなので、そう記述しましたが動作しませんでした。 CGIと同じディレクトリに置いているので、記述を「<!--#include virtual="./txtdayc1.cgi"-->」に変えたところ、HTMLファイルでは動作しました。 なぜSSIのテキストカウンタがCGIで表示されないのか、アドバイスをお願いできないでしょうか? また、「<!--#include virtual="仮想パス"-->」を「<!--#include virtual="CGIファイル名"-->」または「<!--#include virtual="フルパス"-->」のように記述しても問題ないのかも教えて頂けると助かります。 宜しくお願い致します。

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

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.6

> HTMLファイルにSSIで表示させる場合、HTMLファイルのパーミッションをご存知ないでしょうか 644の様なパーミションであれば、自分以外はReadしかできないので問題ないと思いますよ。 グループに対するアクセス権が必要なさそうなら、もうちょっと厳しくして604でもいいかも。 # ANo.3~4の方法はもう使う必要はないと思うけど # なんで動かないのか気になるので、一応。 バッククォートですが、これでコマンドを囲むと そのコマンドが出力した内容が帰ってきます。 例えば、timeコマンドは(環境によりますが) 「2007年 2月16日 金曜日 04時01分12秒 JST」 の様な内容を出力するので、perlで  $t = `time`; の様にして呼び出すと、 $tに「2007年 2月16日 金曜日 04時01分12秒 JST」が入ります。 > そして、「print `./txtdayc1.cgi`;」と記述して試しましたが、やはり動作しませんでした。 これですが、ANo.2の補足のようにtxtdayc1.cgiを書き換えた結果、 txtdayc1.cgiを呼び出しても何も出力しないようになっていると言うことはありませんか?

ka_mu
質問者

お礼

お返事が遅くなり、大変失礼致しました。 「print `./txtdayc1.cgi`;」と記述して動作しなかった件。 「txtdayc1.cgi」自体は、手を加えていないもの(ダウンロードして設定だけ変えたもの)を使用しました。 ANo.2の補足で手を加えたものとは関係ありませんので、その点は問題ないかと思います。 漠然と「動作しない」とだけ申しましたが、正確には、 ページを表示できません 検索中のページには問題があるため表示できません。 フラウザに上記のようなエラーが出て、表示すらされず、原因も全く分かりません…。 こんなにアドバイスを頂いているのに、本当に申し訳ないです。 ちなみに、掲示板・日記帳・チャット・リンク集など、色々なCGIをダウンロードし、同じように「print `./txtdayc1.cgi`;」と記述しましたが、どれも同じ結果(一切表示されません)でした。 ※「$t = `time`;」と記述した場合も同じ結果でした。 パーミッションの件ですが、いくら検索しても分からなかったので、本当に助かりました。 通常のHTMLファイルなどと同じ「644」にしていたので、そのままのパーミッションで使用しようと思います。 本当にありがとうございました。感謝致します。

その他の回答 (5)

  • Werner
  • ベストアンサー率53% (395/735)
回答No.5

ANo.2の補足に気づいてませんでした…。 ANo.2の補足のやり方でできたのであれば、 ANo.3~4のやり方を使わなくてもそちらの方で良いと思います。 (ANo.3~4はこういう事もできるという参考程度に。) > require "./txtdayc1.cgi"; この場合、txtdayc1.cgiはcgiから呼び出されることはなさそうですので、 拡張子は.plなどの方が良いかと思います。 (拡張子はただの慣例なので別に何でもいいと言えば何でもいいんですけどね。)

ka_mu
質問者

お礼

お返事が遅くなってすみませんでした。 失礼かと思いますが、4と5のお返事を一緒にさせて頂きます。 4の件ですが、「'」と「`」の間違いは私の勘違いです。 「`」というものを知らなかったため、「'」と同じだと思い込んでいました。すみません。 そして、「print `./txtdayc1.cgi`;」と記述して試しましたが、やはり動作しませんでした。 これで動けば有難かったのですが、大変残念です。 5の件ですが、拡張子については大変参考になりました。 「.cgi」を「.pl」に変更して、改めて試してみます。 つかぬ事を伺いますが、HTMLファイルにSSIで表示させる場合、HTMLファイルのパーミッションをご存知ないでしょうか? 検索して随分調べたのですが、それらしい記事を見つけられませんでした。 初期設定(何も変えない)ままで問題ないのか、とても心配です。 もしご存知でしたら教えて頂けると幸いです。

  • Werner
  • ベストアンサー率53% (395/735)
回答No.4

> print './txtdayc1.cgi'; '(シングルクォート)じゃなくて、 `(バッククォート)で囲むんですよ。 http://stat.sm.u-tokai.ac.jp/~yama/perl/p2.html

  • Werner
  • ベストアンサー率53% (395/735)
回答No.3

CGIスクリプトを書いているなら、SSIにこだわらなくても その部分もCGIスクリプトで処理してしまえば良さそうですね。 例えば以下のようにすれば、perlで出力を受け取って表示できませんか? print `./txtdayc1.cgi`;

ka_mu
質問者

お礼

回答ありがとうございました。 >print `./txtdayc1.cgi`; テキストカウンタのヘルプには、SSIでの呼び出し方しか載っていなかったので、これも気付きませんでした。 こちらも試してみます。 話がそれますが、「SSIにこだわっている」わけではないのです。 CGIにテキストカウンタを付ける知識がない為、ダウンロードさせて頂いたSSIプログラムを組み込み、「これを使いまわす事ができれば、簡単にテキストカウンタが設置できる」という勝手な考えだけでやっています。 ですから、結果的には「テキストカウンタを付けたいと思ったCGIに、テキストカウンタが付けられればいい」という事です。 JavaScriptや画像で表示するカウンタなら動作するのですが、「どんなブラウザ(の設定)でも動作するテキストカウンタ」にこだわっているため、どうしてもテキスト表示したいのです。 勝手な事を言いましたが、お気を悪くしたら申し訳ありません。 本当にありがとうございました。

ka_mu
質問者

補足

print './txtdayc1.cgi'; 上記で試したところ、「./txtdayc1.cgi」と表示されてしまいました。 表示できれば簡単で良かったのですが、残念です。

回答No.2

そのSSIプログラム全体を関数化して サブルーチンとしてCGI側から呼び出せば良いのでは?

ka_mu
質問者

お礼

回答ありがとうございました。 元のCGIに、SSIのプログラムを埋め込んでも差し支えないのですね。 早速試してみます。 このような事も気付かず、お恥ずかしい限りですが、大変参考になりました。 本当にありがとうございました。

ka_mu
質問者

補足

・txtdayc1.cgi sub txtdayc1 { txtdayc1.cgiの内容 } 1; ・テキストカウンタを表示したいCGI require "./txtdayc1.cgi"; &txtdayc1; ※「&txtdayc1;」は、テキストカウンタを表示したい部分に記述しました 上記で表示・動作しました! 表示された時は嬉しさを超え、感動すらしました。(笑) このような方法がある事を知り、大変勉強になりました。 HTMLファイルに表示させる場合はSSIで、CGIの場合は今回の方法を使う事にします。 本当にありがとうございました。 【皆さんへ】 記述があっているのか分からないので、上記の記述で問題があるようでしたらお知らせ頂けると有難いです。 また、HTMLファイルにSSIで表示させる場合、HTMLファイルのパーミッションもご存知でしたら教えて頂けないでしょうか? 「SSIはセキュリティ的に問題がある」とどこかで拝見したので、パーミッションの設定が初期設定の(何も変えない)ままだと不安です。

  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.1

SSIは静的なHTMLを読み出すときしか作動しませんので、CGIの出力にSSI構文を書いてもお望みの結果は得られません。 CGIスクリプトからSSIで呼び出そうとしているスクリプトを呼び出して埋め込むとか 静的なHTMLを吐き出すCGIスクリプトを使うとか なんか別のアプローチが必要です。

ka_mu
質問者

お礼

お返事が遅くなりましたが、アドバイスありがとうございました。 SSIをCGIに埋め込めないという事をはじめて知りました。 勉強になりました。 >CGIスクリプトからSSIで呼び出そうとしているスクリプトを呼び出して埋め込む その方法を検索して探したのですが、それすらも分かりませんでした。 簡単な改造をする程度しか知識がない為、色々なサイトを拝見して勉強していこうと思います。 本当にありがとうございました。

関連するQ&A