Web システムのツボ

SSI(Server Side Include)で外部ファイルを読み込んでみよう

「htmlファイルで外部ファイルやPHPファイルを読み込みたい!」

という時はSSIを利用すれば簡単に実現できます。
今回はその方法を紹介したいと思います。

ただし、セキュリティの問題がありますので、
実案件で使用する際には、リスクを説明した上でお客様に確認をとってください。
更に、サーバーでSSIが使用できるかのチェックも忘れずに!

以上の事を注意してSSIを行ってみましょう。

ApacheでSSIを使えるようにする

まずSSIを行うには、Apacheの設定でSSIが許可されている必要がありますが、
最初から許可設定になっているサーバは少ないと思います。
そこで、SSIを有効にする為に.htaccessファイルに下記を記入します。
(残念ながらhtaccessが許可されていないサーバの場合は潔く諦めましょう)
Options +Includes
AddHandler server-parsed html
1行目がSSIを使えるようにする記述、
2行目は拡張子がhtmlのファイルにSSIを有効にする記述です。

上記の記述を行い、SSIを有効にしたい一番上の階層のディレクトリに
「.htaccess」ファイルをアップロードします。
execを有効にしない場合
上記の設定ですと、「exec」のプログラム実行も有効となります。
SSIを利用する目的が、 「execを使用してCGIプログラムを呼び出さない」
「ヘッダやフッタのhtmlを読み込むだけでOK!」 というような場合は、1行目を下記に書き換えます。
Options +IncludesNOEXEC
NOEXECをつける事によって、「exec」の機能を省くことができます。
拡張子がshtmlのファイルのみSSIを有効にしたい場合
2行目を下記の記述に変更して下さい。
AddHandler server-parsed shtml
これで、shtmlの拡張子ファイルのみSSIが有効になり、 htmlの拡張子ファイルではSSIが無効となります。


htmlファイルにコードを記述

次に外部ファイルを読み込むコードを記述します。
Googleなどで検索してみると、だいたい下記の方法がヒットすると思います。
<!--#include file="Include.html" -->
<!--#include virtual="../include/Include.html" -->
この「file=""」「virtual=""」の違いは、
読み込むファイルのディレクトリ場所によって記述方法が変わります。

「file」
は、 上層のディレクトリにあるファイルは読み込めません。
<!--#include file="../file/oooo.html" -->
これだとエラーになります。 下記のように、同ディレクトリやサブフォルダにある場合はOKです。
<!--#include file="oooo.html" -->
<!--#include file="file/oooo.html" -->
反対に、「virtual=""」の場合は、
別のディレクトリ指定でも、サーバの絶対パスでも指定が可能です。 下記の様な記述でもOKです。
<!--#include virtual="../file/oooo.html" -->
<!--#include virtual="/file/oooo.html" -->
上記の記述を外部ファイルを読み込みたい箇所に書いておくと、
外部ファイルの中身と置き換わります。
後はブラウザで確認し、上手く動作していればSSIの実装完了です!

他にもSSIでできることはたくさんあるのですが、
今回は外部ファイルの読み込みをご紹介させていただきました。
こんなに便利なSSIですが、冒頭でも書きました通りセキュリティの問題があるので、
十分ご注意下さい。


(hirohito)

Webシステムのツボとは

オープンソースの紹介や、プログラミング講座、フリーソフトのレビューなど、Webエンジニアが送る、つれづれ日記。
【隔週金曜日更新】

運営会社:株式会社ジーピーオンライン

RSSを購読する

Monthly Archive