• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:初めてのSSIで外部から・・・。)

初めてのSSIで外部から…

このQ&Aのポイント
  • 初めてSSIを使って外部のtxtファイルを呼び出す方法について質問です。
  • SSIを使用する際の制限や問題、考慮すべきことについて質問です。
  • 呼び出すファイルの形式について質問です。

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

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

> これは私は知らなかったのですが、スクリプトもよ呼び出せるんでしょうか?いまいち使い方がよく分かりませんが、具体的にはどのような状況で使用するのでしょうか? 「スクリプトも呼び出せる」というより、本来はスクリプト(プログラム)を呼び出すのが有効な使い方です(これは後述します)。 どのような状況で使用するか?、というご質問は難しいですね…、「いろいろ」としか言いようがありません(苦笑)。「CGIの使い道」みたいなものです。 ご存知と思いますが「SSI」とは Server Side Include の略、Includeは、つまり「何かをページに埋め込む」という意味です。その「何か」というのが、今回のケースでは「menu.txt」というテキストファイルだったわけですが、「何か」は他にも「最終更新日時」や「現在時刻」でも良いし「ファイルサイズ」でも、そして「プログラムの実行結果」でも良いわけです。 include file="~.cgi" や execを使うと「プログラムの実行結果」が埋め込まれます。 よくある簡単な使用例をあげると、 ●ログインするとページに「ようこそ○○さん!」などと表示される(このOKWebの左上のように) ●アクセスカウンター(画像タイプのものはブラウザ側で「画像オフ」にしていたりキャッシュを読んだり何かと誤差が多いですが、SSIによってテキストを埋め込むようにすると、多少正確性が上がる他ブラウザにとって軽いページになる) ●「更新履歴」や「今日のひとこと」など、ページの一部に表示される簡易掲示板のようなもの ●「為替レート計算プログラム」を埋め込んで、「今日の円相場は1ドル:○○円です」と表示させる ●今回のようなメニュー埋め込みで、メンバーにだけメンバー専用ボタンを表示させる などなど、アイデア次第で実に様々に使えます。 ごくごく簡単なサンプルです。 以下をコピーして「ja.cgi」というファイル名で保存してください。 ※先頭行の「#!…」はお使いのサーバーに合わせて適宜変更 ---------------------- #!/usr/bin/perl @te = ('グー', 'チョキ', 'パー'); $i = int(rand(3)); print "Content-type: text/plain\n\n"; print $te[$i]; ---------------------- 以下をコピーして「ja.html」あるいは「ja.shtml」というファイル名で保存してください。 ---------------------- <html> <body> 最初はグー、……ジャンケン……<!--#include file="jan.cgi"-->!! </body> </html> ---------------------- この2つのファイルを同じディレクトリに置いて、「ja.cgi」には705パーミッションを設定、必要に応じて.htaccessなどを使ってSSIを有効にしてください。 そしてブラウザで「ja.html」にアクセスしてみてください。F5 キーを押すなどして何度かリロードしてください。 ※お使いのサーバーによって、 <!--#include file="~ ではなく <!--#exec cmd="~ <!--#exec cgi="~ かもしれません。 ------------------------ あえて言うと、SSIは、上記のような「動的」なものに使うのが、本来のあるべき形といえます。 「menu.txt」を自動的に埋め込むのは便利かもしれませんが、サーバーにやらせる必要があるかどうかが重要です。注意すべきは「アクセスごとに毎回、埋め込み作業が行われる」という点です。「毎日」だとか「毎時間」ではありません。たとえば1時間に100人がアクセスしたら、サーバーは1時間に100回おなじことを繰り返します。すべて結果は同じなのに。 言い換えると、あらかじめ404not_foundさんが手元のパソコンで“1回だけ”埋め込み作業をして「完成品」をサーバーに置いておくのと、サーバーが1時間に100回も同じ作業を繰り返すのと、結果は同じ、つまり表示されるページは何ら変わりません。 これは無駄である以前に、なんだか意味がないように思いますよね。もちろんサーバーの負荷も上がります。 動的、つまり「そこに何が表示されるかは、サーバーが作業をしなければ決まらない」ようなものなら、その必要性もあると言えます。 (ちなみに、これはSSIに限らずCGIなどのプログラム全般に言えることです) もちろんこれは、有効な使い方というだけで、本来のあるべき形とは言っても、テキスト埋め込みが良くないという意味では決してありません。実際そのような機能が用意されているわけですし、サーバーの負荷が極端に高いとも思えませんから、あくまでも、この先404not_foundさんが目指す理想として捉えていただけたらと思います。 ちなみに、あらかじめ手元のパソコン上で埋め込み作業を行うなら、テキストエディタの「全置換」やマクロや、perlを使うと大変便利です(もともとperlは、このようなテキスト処理のために開発された言語で、とても得意な仕事です)。

404not_found
質問者

お礼

tasekiさん本当にありがとうございます。 とても分かりやすく、初心者の私でも理解できました。なるほど!本来はスクリプトを呼び出す為のものだったんですね。 さらにサンプルのスクリプトまで付けていただき感謝です。設置してみたところ更新ごとに表示が変わりました。私にはこの様なものでも、少し感動を覚えました。すごいですね~。 ようは、何でも呼び出せると言うことでしょうか?例えばjavascriptとかでも・・・。色々試して見たいと思います。 ありがとうございました。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

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

> ようは、何でも呼び出せると言うことでしょうか?例えばjavascriptとかでも・・・。色々試して見たいと思います。 試されれば判るかと思いますが、 JavaScriptを記述したテキストファイルも、もちろん指定できますが、実行するわけではありませんので、念のため…。 JavaScriptはサーバーではなくブラウザが実行するものです。 「呼び出す」ではなく「埋め込む」と理解したほうがいいと思いますよ。Includeです。 で、(サーバーの)実行ファイルであれば、「結果」が埋め込まれる、ということです。 ついでに言えば、何でも呼び出せる(埋め込むことができる)、というのは間違いではありませんが、SSIはHTMLファイルに書く(埋め込まれる)わけですから、たとえば画像データを指定することはできても、普通はHTMLに画像を埋め込まないですよね。

全文を見る
すると、全ての回答が全文表示されます。
  • taseki
  • ベストアンサー率66% (155/233)
回答No.1

1. 「適応されるページ」とは、<!--#include ~を書いたページのことですよね? 制限はありません。SSIはファイルそれぞれ個別に動作するもので、何かが統括して管理・動作するものではありません。 2. ブラウザにとっては全く関係ありません。 言い換えれば、ブラウザから見れば、SSIのページだろうが普通のHTMLだろうが、もっと言えばCGIやASPのページだろうが、すべて同じ、ただ「サーバーから送られてきた完成HTMLを表示するだけ」しかしていません。 3. いろいろありすぎて…、具体的に絞っていただければ答えられますが。 たとえば最も要注意なのは、include file="~.cgi" や exec のようにスクリプトなどを呼び出すものです。これはSSIというより、CGIなどと同じように実行ファイルは事前にテストを十分に、などということと同じ事です。 4. txt に限りませんし、上の3にも書いたように、実行ファイルも可能です(ただしレンタルサーバーなどは禁止しているものもある)。

404not_found
質問者

お礼

tasekiさんありがとうございます。 なにぶんはじめての経験で何が起こるか不安な部分があるのでご意見いただけてとても助かります。 >「適応されるページ」とは、<!--#include ~を書いたページのことですよね? はい、そうです。制限は無いのですね。 >たとえば最も要注意なのは、include file="~.cgi" や exec のようにスクリプトなどを呼び出すものです。 これは私は知らなかったのですが、スクリプトもよ呼び出せるんでしょうか?いまいち使い方がよく分かりませんが、具体的にはどのような状況で使用するのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • SSIを作るにあたり

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

    • ベストアンサー
    • HTML
  • JavaScriptの外部ファイル化とSSIについて

    いつもお世話になっております。 親切で丁寧なご回答に心から感謝いたします。 今回、JavaScriptを外部ファイルにし、 更新等の時間を大幅に削減しようと思っておりますが、 上手くいかないためこちらに質問させていただきました。 当方のホームページではメニュー部とタイトル部をSSIを利用し、 インクルードさせ、表示しておりますが、JavaScriptを外部ファイルにすると、 SSIでインクールドさせている部分だけ表示されなくなってしまいます。 Firefoxのソース表示でソースをみると、インクルードさせている部分は、 ソースにはありましたが、その部分だけHTML文書ではなく ただの文書(黒字)になってしまっております。 ただ、indexページだけはなぜか正常に表示され、 メニューから移動した際に、インクルードしたものが表示されない状態です。 メニュー部は外部ファイル化したJavaScriptでツリーメニューになっています。 何卒、宜しくお願いいたします。 ソースは下記のとおりです。 <HEAD> <META> <LINK href="detarame2006.css" type="text/css" rel="stylesheet"> <script type="text/javascript" src="script.js"> </HEAD> 省略 <TR> <!--#include file="top/top.html" --> </TR> <TR> 省略 </TR> <!--#include file="menu/menu.html" -->

  • 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超初心者です。よろしくお願いします。 HPのメンテが大変になってきたため、共通部分のヘッダー・メニュー・フッターを外部ファイル化してSSIのインクルード文で読み込もうとしています。正常表示されていた元のHTMLファイルからカット・ペーストで外部ファイルを作成し、元部分にはインクルード文を挿入したうえでSHTMLファイルとして保存しました。 一応これでそれなりの表示にはなるのですが、微妙(10~20pxほど)にレイアウトがあちこち崩れて困っています。 とくにHTMLページからSHTMLページにリンクで行くと、全体が20pxほど下にずれているため、「がたっ!」が明白です。HTMLページからHTMLページへの移動ではそれは起こりません。 原因と対処方法が分かる方がいらしたら教えてください。超初心者なので、見当違いの質問でしたらごめんなさい。

    • ベストアンサー
    • HTML
  • SSIでインラインフレームを表示する方法教えてください

    HTMLとSSIについての質問です。 データを使い回しするため、menu.htmlというページを作りました。 includeでファイルを呼び出してみると インラインフレームを使用して作成した部分が表示されません。 左側にmenuとして、 ABOUT BBS BOOK などと、並び、たとえばABOUTのページに インラインフレームで違うページを組み込んでいるのですが それがどうしても表示されません。 何かいい方法はありますか? SSIを使うと、インラインフレーム作成のページは 表示されないものなんでしょうか?

  • SSI #include virtual="~"

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

  • SSIをhtmlで有効にするのはよくないでしょうか

    100ページくらいのhtmlに共通のメニュー(ナビゲーション)やフッタを入れるために、メニューやフッタファイルをSSIでincludeしています。 .htaccessで AddHandler server-parsed html としていますが、これをやると(全てのhtmlを一旦サーバーが解釈するので)サーバーの負担が増大するからよくないとききました。 実際のところどうなんでしょうか? SSIを使わないページはごくわずかで、大半がshtmlであれば結局大差ないでしょうか?

    • ベストアンサー
    • Perl
  • 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 階層が深くなっても使えるのでしょうか?何が悪いのか、教えて下さい。 長文を読んで下さり、ありがとうございました。

  • 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を使わずに・・・

    SSIを使わずに、CGIやJavaScriptを使って”include”や”virtual”コマンドと 同様の効果を得ることはできるのでしょうか? 知人の会社のHPを頼まれて作成しているのですが、早い話がフレームを使わずに 共通のメニュー項目を複数のページに表示させたい。 SSIが使えるサーバーであれば上記コマンドで簡単なのですが、彼の契約サーバーは SSI使用不可(オリジナルCGIは可)、という状況です。 仕方が無く、ひたすらコピーして作っています(^_^;;) かなり探したのですが、「できる」旨を記載しているページはあるのですが、 その手法まで記載したページにはたどり着けませんでした。 ご存じの方いらっしゃいましたら、どうかご教示願います。

    • ベストアンサー
    • CGI