• ベストアンサー

これらの2つの違いを教えて下さい。

カテゴリーが違っているかもしれませんが、質問させてください。初心者です。 SSIを使ってファイルを呼び出すときに、こういった記述を行うと思うのですが・・・。<!--#include file="./menu.txt" --> もう一つ。<!--#include virtual="./menu.txt" -->という記述方法があるのですが、このfileとvirtualの違いは何でしょうか??私が二つ試したところ、この記述方法の違いを感じることは出来ませんでした。 また、Apacheではvirtualを推奨していると言うことなので、fileを使わずに全てvirtualで記述したら駄目なのでしょうか?? あと、="./menu.txt"と書いている部分の./ってどんな意味でしょうか?上の階層を指定する場合は./../menu.txtと書けばいいのでしょうか? 変な質問ですみません。よろしくお願いします。

  • CGI
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
  • haru44
  • ベストアンサー率60% (12/20)
回答No.2

2つは、ファイルの探し方(root)が違います。 #include file= は、そのHTMLファイルがある ディレクトリから実際のディレクトリ構造に沿って 探します。 本当のルートディレクトリを指す / や 上位ディレクトリ ../ は、サーバの設定によっては 使えないことがあります。 #include virtual= は、DocumentRoot からの ディレクトリ構造に沿って探します。 / を指定すると DocumentRoot になります。 ../ なども使えますが、DocumentRoot の中しか たどれません。 下記の2つを試すと違いが出てくると思います。 #include file="/index.html" #include virtual="/index.html" それから別件ですが、 ピリオド2つで上位ディレクトリを指すのは ご存知のようですね。ピリオド1つはカレント ディレクトリを指します。 ./menu.txt は、明示的に、カレントディレクトリの menu.txt を表わしています。 サーバによっては、ファイル名の先頭が ./ でないと 受け付けてくれない設定になっているものもあるので、 念のため ./ をつける習慣になっているみたいです。

apple_mango
質問者

お礼

haru44さんありがとうございます。 とても丁寧なご説明感謝いたします。 >下記の2つを試すと違いが出てくると思います。 #include file="/index.html" #include virtual="/index.html" なるほど、探し方が違うと言う意味が分かりました。 >./menu.txt は、明示的に、カレントディレクトリの menu.txt を表わしています。 ありがとうございます。 >念のため ./ をつける習慣になっているみたいです。こんな習慣もあったんですね。本当にとても参考になりました。

その他の回答 (1)

  • taseki
  • ベストアンサー率66% (155/233)
回答No.1

<!--#include virtual="./menu.txt" --> というのは間違いではないでしょうか。 fileは、対象ファイルの検索開始がカレントディレクトリ(そのSSIファイルがあるディレクトリ)で、 virtualは、仮想絶対パス、簡単に言えば「 http://abc/def/ghi/ 」の 「/def/ghi/」部分です。 使い分けは、fileは上位ディレクトリを参照できませんので、そんなときはvirtualを使います。 ↓ここなんて参考になるのでは? http://www.scollabo.com/banban/ssi/ssi_005.html 「./」の意味については、それをお答えするよりも、「パス」について勉強されたほうがapple_mangoさんにとって良いかと。 ちなみに私はよく「/abc/menu.txt」というような書き方をします(先頭がピリオドじゃなくスラッシュ)。これは絶対パスと言って、それを書くファイルがどこにあろうと常に同じなので、コピーなどもできて便利だからです。

apple_mango
質問者

お礼

早速のご解答ありがとうございます。 ><!--#include virtual="./menu.txt" -->というのは間違いではないでしょうか。 なるほどですね!今回はvirtualを使ってもカレントディレクトリ内のファイルを呼び出せたので、何が違うのかなーと思っていた次第でした。 URLの方も参考にさせていただきます。

関連するQ&A

  • DreamWeaverでSSIをつかったのですが、ブラウザで表示されません。

    インクルードするファイルには <!--#include file="ssi/header.html" --> を挿入してあり、Dreamweaverのデザインでは きちんと表示がされております。 それをサーバーへアップしてもブラウザ上では表示されません。 もちろん、header.htmlはサーバーへアップしてありますし インクルードのタグを書いているページはshtmlです。 サーバーもSSIは対応しています。 いろいろな過去ログを参照したのですがいまいち原因がわかりません。 階層が間違っているのかと思い、 <!--#include virtual="ssi/header.html" --> でもしてみましたが、やはり表示されませんでした。 ちなみに、ブラウザで表示されるもののソースをみると <!--#include file="ssi/header.html" -->の記述が残ってあります。 通常、上記のようなインクルードされたものは記述がなくなるはずなのですが、なぜか表示されております。 .htaccessなるものですればよいのか どうやってすればよいのかが全然わからず困っております。 どうか、ご教授下さいませ。

    • ベストアンサー
    • HTML
  • SSI #include virtual="~"

    <!--#include virtual="~" --> の「~」のところにhttp://で始まるURLをいれるとSSIが動きません。 <!-- #include file="http://****/***" --> これもダメ。 <!--#include file="~" --> にファイル名を入れるとSSIは動きます。 <!-- #include file="../**/***" --> これも動きます。 私は何か勘違いをしていますか? #windows2000サーバーです。

  • どうしてもできません(??)

    レンタルサーバーのSSI使用条件 1・ファイルの拡張子をshtmlにする。 2・ファイルは同じ階層に置く。 この条件を満たした上で、SSI用にtxtファイルを作り、それを適用させたいshtmlファイルのbody内の表示させたい部分に、<!--#include file="title.txt"--> このように貼り付けました。しかし、全く機能しません。なぜでしょう???

    • ベストアンサー
    • HTML
  • IISのSSIの設定について

    SSIについてここで質問していいのか分からなかったんですが、 SSIが見当たらなかったのでここで質問させていただきます。 現在ローカルでSSIの表示テストを行っています。SSIの設定はデフォルトでされているので特に設定する必要はないと思っていたのですが、以下の現象がおこっています。原因がお分かりでしたらお教えください。 SHTMLファイル内で他ファイルインクルードを行うためにincludeを記述したのですが、引数名fileは正常に取り込めるのですが、virtualでは「404 Object Not Found」のエラーが出ます。以下該当の記述。 <!--#include file="./include/test.html"--> 正常 <!--#include virtual="../include/bgcolor.html"--> 異常 レンタルサーバ上ではどちらも問題なく表示でき、ローカルの場合だけエラーが出ます。 IISの設定に何か必要なのでしょうか? IISのバージョンは5.1 OSはXPです。 以上。よろしくお願い致します。

    • ベストアンサー
    • CGI
  • SSIが作動しません

    使っているレンタルサーバーは、SSIを許可しています。実行ファイルとSSI記述ファイルが同じ階層にあれば使えるという制限です。 今回初めてSSIを使って、タイトル(+カウンター)とメニューの項目を全ページに表示させようとしているのですが、うまくできません。 SSIを記述するファイルについていまいちわからないのですが、まずはタイトル(+カウンター)の記述をしたいのですが <table align="center" width="100%" cellspacing="0" cellpadding=""> <tr> <th align="left" width="45%" class="font2">タイトル名</th> <td width="55%" valign="bottom"><script language="JavaScript" type="text/javascript" src="http~"></script><noscript><a href="http~" target="_blank">カウンター</a></noscript></td> </tr> </table> ↑このように貼り付け、ファイル名を「title.shtml」としました。 で、実行ファイルの表示させたい部分に、<!--#include file="title.shtml"-->と書いたのですが、画面にタイトルが表示できません。 ファイル名を上記のように保存したら「title.shtml.txt」になってしまっていたので、それに合わせて<!--#include file="title.shtml.txt"-->でも試したのですが無理です。

    • ベストアンサー
    • HTML
  • 初めてのSSIで外部から・・・。

    今回非常に共通部分が多いので、初めてSSIを使ってtxtを呼び出そうとしています。 そこで一応テストで簡単なファイルを10ページほど作成して見ました。一応うまく動作したのですが、不安があるので質問させてください。 1、 例えばこの様な記述で、<!--#include file="./menu.txt" -->メニュー部分を管理した場合、適応されるページ数に制限はありますでしょうか?極端な話ですが、1000ページでも10000ページでも、問題は無いでしょうか?(サーバ側のスペックは無視です) 2、現在SSIに対応していないブラウザはありますでしょうか? 3、SSIを使用するに当たって、何か問題や、作成前に考慮しておかなければいけないことなどがありますでしょうか? 4、呼び出すファイルは.txtじゃないとだめでしょうか? 初めてなもので、とても不安です。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • ssi がうまく動作しません。

    サーバ会社に訪ねると.htaccessに AddType text/html shtml を記入して下さいとのことでした。 以下の方法でためしましたが、エラーがでるわけでもなく、<!--#INCLUDE VIRTUAL="/ssi/xxx.shtml"--> にした部分だけが表示されません。 http://aaa.com/bbb/ccc/ddd.html .htaccess は、bbbのファイル内におきました。 1, ssi/xxx.shtml は、indexと同じトップの階層におきました。 ddd.html に  <!!--#INCLUDE VIRTUAL="/ssi/xxx.shtml"--> を記入しました。 2, ssi/xxx.shtml は、bbbのファイル内において、ddd.html に <!--#INCLUDE FILE="/ssi/xxx.shtml"--> を記入してみましたが、これもだめでした。 パーミッションも何がいいのか、お分かりでしたらお願い致します。 ちなみに777にして試したのですが、だめでした。

    • ベストアンサー
    • CSS
  • HP作成において、フォルダ整理後、SSIが上手く起動しません

    HPビルダーV6.0(バンドル版)、WindowsXPを使用して、HPを運営しています。 インフォシークの無料スペースを利用し、ブラウザ上で見ると自動的に上下に広告が入ります。 画面上部にメニュー項目を作っており、メニュー部分を外部ファイルにし、全ページにSSIを用いて、そこを更新した時に、全ページのメニュー部分が自動的に更新されるstmlファイルにしています。 stmlファイルは上部に広告が入らなくなってしまう為、stmlファイルでも広告が入る様に、インフォシークの案内から『<!--#include virtual="/header.txt" --><!--#include file="外部ファイル名.shtml" --』を〈BODY〉直後に入れています。 最近HP作成でファイルがだいぶ増えた為、フォルダビューから新しいフォルダを作り、ドラック&ドロップで整理をしました。その後、HPビルダーのブレビューでは問題なく見れるのですが、サーバーにアップロードしてブラウザ上で見ると、上部のメニュー部分が抜け、その部分に『[an error occurred while processing this directive]』とエラーメッセージが表示されます。 整理後、外部ファイルの階層が深くなってしまったからでしょうか?ちなみに、整理後のタグは『<!--#include virtual="/header.txt" --><!--#include file="../新しく作ったフォルダー名/外部ファイル名.shtml" -->』となっています。 整理はページ毎に行い、フォルダ数が増えました。 ちなみに、トップページの階層は HP/toppage/index.stml 外部ファイルの階層は HP/新しく作ったフォルダ/外部ファイル名.stml 階層が深くなっても使えるのでしょうか?何が悪いのか、教えて下さい。 長文を読んで下さり、ありがとうございました。

  • SSIを作るにあたり

    使っているレンタルサーバーの決まりで、ファイル名をshtmlにしなくてはいけないのですが、shtmlにすると、ファイルが開けなくなってしまいます。txtをつければ開けるのですが、txtをつけなくても開く方法はないでしょうか? それと、SSIを作る時、ファイル名をshtmlにするのは、<!--#include file="★★★" --> ←これを貼り付けたファイルでよろしいんですよね?

    • ベストアンサー
    • HTML
  • 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="フルパス"-->」のように記述しても問題ないのかも教えて頂けると助かります。 宜しくお願い致します。

    • ベストアンサー
    • CGI