SSIとは
SSIとは、Server Side Include(サーバーサイドインクルード)の略です。
SSIは、あなたのホームページの管理や更新作業を、大幅に軽減させてくれる使うと便利なインターネットサーバーのシステムです。
SSIとは、わかりやすく言うと、ホームページを作成するHTMLファイル内に直接書き込むことのできる命令文のことです。
SSIを使用すると、他のHTMLファイルを読み込んで表示させたり、CGIなどを呼び出して実行させることができます。
SSIで読み込まれたHTMLファイルや、実行されたCGIは、SSI命令文の書かれていたところに、置き換わるようにしてホームページのHTML中に表示されます。
- SSIの特徴
- SSIの使用準備(一般サーバー)
- SSIの使用準備(自作サーバー)
- SSIで最終更新日時の表示
- SSIの環境変数一覧表示
- SSIで対象ファイルサイズの表示
- SSIでファイル読み込み表示
- SSIの変数設定
- SSIのコマンド実行
- SSIの条件分岐
- SSIのエラーメッセージ
SSIの特徴
SSIの特徴は、ホームページ作成で使用するHTMLファイル中に、SSIで決められた特殊な命令文をしこんでおくだけで、あとはインターネットサーバーが、自動でウェブページを作り変えてくれるところです。
SSI命令文のあった場所に読み込んだHTMLファイルや、CGIなどの実行結果が表示されるため、当然、訪問者側のパソコンからは、SSIを使用したことはわかりません。
SSIの使用例としては、複数のウェブページに共通するようなメニュー部分を、ひとつのHTMLファイルに集約し、管理作業の手間を軽減させるといった感じです。
SSIを使用して、複数のウェブページのメニュー部分で、同じメニュー用のHTMLファイルを読み込んで表示させれば、更新作業なども楽です。
SSIで、ホームページ全体の共通部分であるメニュー部分を一元管理させることにより、ホームページのリンク切れチェックなど、管理者のストレス部分となる作業も減らすことができます。
今では、ウェブログなどの機能として当たり前になった考え方ですが、昔はウェブページのメニューなどの共通部分を、一元管理できるというのは、なかなか画期的な考え方でした。
もちろん、すべてのウェブページがウェブログのような「コンテンツマネージメントシステム」を採用しているわけではないので、SSIは今でも十分有効なシステムだと言えます。
すでにウェブログを使っていても、SSIも併用することにより、ウェブサイトの管理がもっと楽になります。
SSIは、他のウェブページのファイルを読み込めるだけでなく、CGIなどのPerlプログラムなども動かすことができるので、使い方によってはものすごい力になります。
SSIとCGIなどのプログラムを組み合わせる有名な使用例としては、アクセスカウンターなどがあります。
アクセスカウンターとは、「あなたは○○人目の訪問者です」などと書かれているウェブページで、ほとんどの確立で採用されているCGIのことです。
CGI自体の設置難易度もそんなに高くないことから、CGI初心者の方に広く普及しています。
さらに、プロバイダが提供するホームページスペースでホームページを開設されている方の中には、SSIだと知らないで使用している場合もあります。
プロバイダが提供するホームページで使用可能なアクセスカウンターには、SSI機能を使用しているものが多いです。
SSIの特徴としては、他に、ファイルの最終更新時刻や、ファイルサイズを自動的に表示させるような機能を持っています。
つまり、CGIなどのプログラムをわざわざ設置しなくても、SSIを使えば、ファイルの更新情報や、ファイルサイズなども自動的に調べてくれるということです。
SSIは、SSIで、使用すべき便利な機能がたくさんあるので、あなたのホームページ管理にも、SSIの機能を生かしていただければと思います。
SSIの使用準備(一般サーバー)
ここでは、SSI(Server Side Include - サーバーサイドインクルード)を、あなたのホームページスペースで使用するための準備をします。
SSIをあなたのホームページスペースで使用するには、インターネットサーバー(WWWサーバー)が、SSIをサポートしており、SSI を許可する設定が行われている必要があります。
SSIとは、その名の通り、インターネットサーバー側で動作するシステムなので、まずはインターネットサーバー側で、SSIの使用を許可していなくてははじまりません。
SSIは、どこのホームページスペースでも使用できるというわけではないです。
多くのプロバイダが提供するようなホームページスペースや、無料で使えるホームページスペースには、SSIをセキュリティのために使用を禁止しているところもあります。
SSIをたとえサポートしていても、ホームページ上でSSIを使用するには、いくつかの制限がかかっているところもあります。
例えば、SSIを使用するホームページファイルの拡張子を、「.shtml」や「.shtm」などにしないといけないとか…。
SSIを使用できるフォルダが決まっていたり…。
SSIを使用するためには、自分で「.htaccess」の設定を行わなければならないなどというホームページスペース提供会社もあります。
SSIの使用制限は、プロバイダによって異なるので、SSIを使う前に、調べておくと安心です。
<戻る>
SSIの使用準備(自作サーバー)
ここでは、自分でインターネットサーバーを立ち上げた場合に、前述した一般サーバーと同じようにSSIを使用する方法について説明します。
自作サーバーの説明ですので、環境によっては、この限りではないことをご了承ください。
それでは、自作サーバーで公開するウェブページで、SSIを使用する方法について説明します。
サーバーが、Apacheの場合は、「httpd.conf」か「.htaccess」に以下の記述が追加されている必要があります。
AddType text/x-server-parsed-html .shtml
Options Includes
なければついかします。
「httpd.conf」を変更した場合は、Apacheを再起動してください。
また、「.htaccess」で、AddTypeやOptionsの指定を可能にするには、「httpd.conf」で以下の設定を行います。
許可対象(AllowOverride)には、FileInfo(AddTypeなどの指定を可能にする)。
Options(Optionsの指定を可能にする)。
All(すべての指定を可能にする)。
などを指定します。
「.shtml」のファイルだけでなく、拡張子が「.html」のホームページファイルでも、SSIを使用したいときは、AddTypeの行を次のように変更します。
AddType text/x-server-parsed-html .shtml .html
ただしこのような設定変更を行うことはあまりお勧めしません。
なぜならこうすると、通常のホームページのファイルである「.html」のファイルに対しても、インターネットサーバー側でSSI処理を行うことになります。
その結果としてインターネットサーバーへの負荷が増大するからです。
このあたりのSSI設定に関しては、駆け引きのようなものがあるので、その状況によって使い分けてください。
次ではいよいよ、SSIを使用したホームページ作成例をいくつか紹介します。
SSIで最終更新日時の表示
まずは、ファイルの最終更新時刻を表示するには、以下のように記述します。
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<title>SSIサンプル</title>
</head>
<body>
このファイルは
<!--#config timefmt="%Y/%m/%d %X"-->
<!--#echo var="LAST_MODIFIED"-->
に更新されました。
</body>
</html>
このファイルを、「sample.shtml」などと名前を付けて、ホームページスペースにアップロードします。
そしてアクセスすると…。
「このファイルは Tuesday, 17-Apr-2007 10:43:53 JST に更新されました。」
といった感じに、このファイルの最終更新日時を表示してくれます。
SSIの設定を間違えると、[an error occurred while processing this directive]などと表示されます。
SSIでの時刻表示形式指定
それでは、時刻表示形式を指定するSSI「#config timefmt」について説明します。
SSIコマンドの「#config timefmt」で時刻表示形式を指定するには、「<!--#config timefmt="~"-->」と記述します。
「~」には「%Y/%m/%d %H:%M:%s」などの文字列を指定します。
それでは、それぞれの意味について解説します。
SSIでの時刻表示形式指定(%c)
%cとは、「月/日/年 時:分:秒」を表します。
例えば、「11/21/07 10:12:30」と表示されます。
SSIでの時刻表示形式指定(%x)
%xとは、「月/日/年」を表します。
例えば、「11/21/07」と表示されます。
SSIでの時刻表示形式指定(%X)
%Xとは、「時:分:秒」を表します。
例えば、「10:12:30」と表示されます。
SSIでの時刻表示形式指定(%y)
%yとは、2桁で年を表します。
例えば、「07」と表示されます。
SSIでの時刻表示形式指定(%Y)
%Yとは、4桁で年を表します。
例えば、「2007」と表示されます。
SSIでの時刻表示形式指定(%b)
%bとは、3文字で月を表します。
例えば、「Oct」と表示されます。
SSIでの時刻表示形式指定(%B)
%Bとは、月名をフルスペルで表します。
例えば、「October」と表示されます。
SSIでの時刻表示形式指定(%m)
%mとは、2桁の数字で月を表します。
例えば、「04」と表示されます。
SSIでの時刻表示形式指定(%a)
%aとは、3文字で曜日を表します。
例えば、「Sat」と表示されます。
SSIでの時刻表示形式指定(%A)
%Aとは、フルスペルで曜日を表します。
例えば、「Saturday」と表示されます。
SSIでの時刻表示形式指定(%d)
%dとは、2桁の数字で日を表します。
例えば、「11」と表示されます。
SSIでの時刻表示形式指定(%j)
%jとは、1月1日からの経過日数を表します。
例えば、「111」と表示されます。
SSIでの時刻表示形式指定(%w)
%wとは、日曜日からの経過日数を表します。
例えば、「5」と表示されます。
SSIでの時刻表示形式指定(%p)
%pとは、午前午後の略称「AM」もしくは「PM」を表します。
例えば、「PM」と表示されます。
SSIでの時刻表示形式指定(%H)
%Hとは、24時間制での時間を表します。
例えば、「14」と表示されます。
SSIでの時刻表示形式指定(%I)
%Iとは、12時間制での時間を表します。
例えば、「10」と表示されます。
SSIでの時刻表示形式指定(%M)
%Mとは、分を表します。
例えば、「55」と表示されます。
SSIでの時刻表示形式指定(%S)
%Sとは、秒を表します。
例えば、「51」と表示されます。
SSIでの時刻表示形式指定(%Z)
%Zとは、タイムゾーンを表します。
例えば、「JST」と表示されます。
SSIで環境変数表示
SSIで環境変数を使用する方法について紹介します。
環境変数とは、コンピューター側であらかじめ保持されているシステムの属性を記録した変数のことです。
環境変数の種類は複数あり、ひとつひとつの変数の名前と意味はあらかじめ決まっているため、環境変数を読み込めばシステムの設定がある程度分かるようになっています。
ようするに、SSIで環境変数を表示できるということは、インターネットサーバーが持っている情報の一部をホームページに表示させることができるということです。
SSIで環境変数を使用する利点は、インターネットサーバーごとに異なる環境や、アクセスするタイミングによっても異なる環境の変化をとらえて、変数に格納してくれるところです。
したがって、SSIで環境変数を使用すると、同じ記述方法でも、SSIを動作させるインターネットサーバーによって、異なった結果を取得できるということです。
SSIで環境変数を表示するには、「#echo」という命令文を使います。
SSIで環境変数「#echo」を使うには、「<!--#echo var="~"-->」と記述します。
「~」には「LAST_MODIFIED」などの環境変数名を指定します。
SSIで使用できる環境変数の種類には、以下のようなものがあります。
SSIの環境変数名「DOCUMENT_NAME」とは、このホームページのファイル名を表します。
SSIの環境変数名「DOCUMENT_URI」とは、このホームページファイルまでの仮想パス名を表します。
SSIの環境変数名「QUERY_STRING_UNESCAPED」とは、ウェブブラウザから検索用に送信された文字列を表します。
「QUERY_STRING_UNESCAPED」を使用するときは、いくつかの記号文字(UNIXのシェルのメタ文字)はパックスラッシュ(\)でエスケープされているので注意が必要です。
SSIの環境変数名「DATE_LOCAL」とは、現在の時刻(ローカル時刻)を表します。
ローカル時刻とは、コンピュータに内臓されている時計の時刻のことです。
ローカル時刻のことを、ローカルのシステム時刻とか、システム時刻と言ったりもします。
ようするに、インターネットサーバー側で設定されている時刻のことです。
SSIの環境変数名「DATE_GMT」とは、現在の時刻(グリニッジ標準時(GMT))を表します。
グリニッジ標準時とは、一言で言ってしまえば、世界標準時の起源のことです。
GMTとは、「Greenwich Mean Time」の略です。
GMTとは、文字通り、イギリスのグリニッジ天文台のことを表しています。
GMTとは、グリニッジ天文台での天体観測を元に決められる時刻でした。
ですが、現在では原子時計によって決定されるUTC(協定世界時)が使われています。
SSIの環境変数名「LAST_MODIFIED」とは、このホームページの最終更新時刻を表します。
その他の環境変数
インターネットサーバーによっては、CGIスクリプトが参照可能な環境変数も表示できる場合があります。
SSIの環境変数一覧表示
SSIで使用可能な環境変数の一覧をホームページに表示させることができます。
SSIで使用できる環境変数の一覧を表示させるには、「#printenv」命令を使います。
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<title>SSIサンプル</title>
</head>
<body>
<!--#printenv -->
</body>
</html>
「printenv」と「-->」との間にスペースが必要です。
このHTMLタグを保存し、「sample.shtml」などと名前を付けて、インターネットサーバーにアップロードしアクセスします。
UNIQUE_ID=R-K1ykjotiIAARmOc0UAAAAF
HTTP_ACCEPT=image/gif, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/msword, application/x-shockwave-flash,*/*
HTTP_ACCEPT_LANGUAGE=ja
HTTP_ACCEPT_ENCODING=gzip, deflate
HTTP_USER_AGENT=Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.0.3705; .NET CLR 1.1.4322)
HTTP_HOST=kimurashuuichi.com
HTTP_CONNECTION=Keep-Alive
HTTP_COOKIE=locale=ja-JP
PATH=/bin:/sbin:***
SERVER_SIGNATURE=<address>Apache/2.0.54 (Unix) mod_ssl/2.0.54 PHP/4.4.4 *** mod_perl/2.0.2 Perl/v5.8.8 Server at kimurashuuichi.com Port 80</address>
SERVER_SOFTWARE=Apache/2.0.54 (Unix) mod_ssl/2.0.54
PHP/4.4.4 *** mod_perl/2.0.2 Perl/v5.8.8
SERVER_NAME=kimurashuuichi.com
SERVER_ADDR=00.000.000.00
SERVER_PORT=80
REMOTE_ADDR=000.000.000.00
DOCUMENT_ROOT=/usr/local/***
SERVER_ADMIN=xxx@xx.xx
SCRIPT_FILENAME=/usr/local/***/sample.shtml
REMOTE_PORT=1000
GATEWAY_INTERFACE=CGI/1.1
SERVER_PROTOCOL=HTTP/1.1
REQUEST_METHOD=GET
QUERY_STRING=
REQUEST_URI=/***/sample.shtml
SCRIPT_NAME=/***/sample.shtml
DATE_LOCAL=Friday, 20-Apr-2007 02:10:34 JST
DATE_GMT=Thursday, 19-Apr-2007 17:10:34
GMT LAST_MODIFIED=Friday, 20-Apr-2007 02:10:06
JST DOCUMENT_URI=/***/sample.shtml
USER_NAME=kimurashuuichi
DOCUMENT_NAME=sample.shtml
こんな感じに、このインターネットサーバーで使用可能なSSIの環境変数の一覧を表示します。
Apache 1.2以上のバージョンでしか使用できないので注意です。
<戻る>
SSIで対象ファイルサイズの表示
ここでは、SSIを使用して、ダウンロードファイルの最終更新日とサイズを表示させる方法を紹介します。
まずは、SSIを使用するホームページファイル「sample.shtml」を作成します。
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<title>SSIサンプル</title>
</head>
<body>
<a href="sample.zip">ダウンロードはこちら</a>
(<!--#config timefmt="%Y/%m/%d"-->
<!--#flastmod file="sample.zip"-->更新,
<!--#config sizefmt="abbrev"-->
<!--#fsize file="sample.zip"-->バイト)
</body>
</html>
このSSIを使用したホームページにアクセスすると…。
「ダウンロードはこちら( 2007/03/06更新, 167 バイト)」
こんな感じで表示されます。
SSIの設定を間違えると、[an error occurred while processing this directive]などと表示されます。
それでは、ここで使用している各種SSIコマンドについて解説します。
SSIでの最終更新時刻表示
まずは、最終更新時刻を表示するSSI「#flastmod」から説明します。
SSIで最終更新時刻を表示する「#flastmod」には、2種類の書き方があります。
<!--#flastmod file="~"-->
<!--#flastmod virtual="~"-->
どちらのSSIコマンドも、指定したファイルの最終更新時刻を表示します。
日時の表示フォーマット(形式)は、「<!--#config timefmt="~"-->」で指定したものに従います。
SSIで、ファイルの最終更新時刻を表示する「#flastmod」命令の、「file="~"」の「~」には、ファイル名を指定します。
SSIを動作させる環境によっては「../」や絶対パスは使用できない場合があります。
SSIで、ファイルの最終更新時刻を表示する「#flastmod」命令の、「virtual="~"」の「~」には、指定するファイルの仮想パスを指定します。
仮想パスとは、わかりやすく説明すると「http://xxx.com/abc…」の「/abc…」の部分のことです。
SSIの設定を間違えると、[an error occurred while processing this directive]などと表示されます。
SSIでファイルサイズの取得
続いて、SSIでファイルサイズを取得し表示させる方法について解説します。
ファイルサイズの表示フォーマット(形式)は「<!--#config sizefmt="~"-->」で指定したものに従います。
「~」に「bytes」を指定するとバイト単位で、「abbrev」を指定すると「Bytes, KBytes, MBytes」などの適切な単位で表示されるようになります。
指定したファイルサイズを表示させるSSIコマンド(命令)、#fsizeについてもう少し詳しく説明します。
SSIのファイルサイズ表示コマンド、#fsizeで指定するファイルへのパス指定方法には、2種類の方法があります。
<!--#fsize file="~"-->
<!--#fsize virtual="~"-->
どちらのSSI命令も、指定したファイルのサイズを調べて表示します。
ウェブページとしての表示結果は同じですが、多少SSIの指定方法が違います。
SSIのファイルサイズの表示を指定する「#fsize」命令の、「file="~"」の「~」には、ファイル名を指定します。
SSIを動作させる環境によっては「../」や絶対パスは使用できない場合があります。
SSIのファイルサイズの表示を指定する「#fsize」命令の、「virtual="~"」の「~」には、指定するファイルの仮想パスを指定します。
仮想パスとは、わかりやすく説明すると「http://xxx.com/abc…」の「/abc…」の部分のことです。
<戻る>
SSIでファイル読み込み表示
SSIを使用して、別のHTMLファイルを読み込んで表示させる方法を紹介します。
SSIで、複数のウェブページに共通するメニュー項目や、ヘッダー部のリンクやフッター部の著作権表示など、共通する部分のみを別のHTMLに集約し、必要に応じて呼び出し表示させることができます。
こうしておくと例えば、メニュー項目を管理しているHTMLファイルをひとつ修正するだけで、すべてのウェブページを変更することができます。
早い話が、ホームページの管理がめちゃくちゃ楽になるわけです。
SSIの使用用途としては、わりとよく使われる方法です。
まずは、「sample.shtml」をこんな感じで作成します。
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<title>SSIサンプル</title>
</head>
<body>
<!--#include file="header.html"-->
<p>本文、ここにコンテンツが入ります。</p>
<!--#include file="footer.html"-->
</body>
</html>
つぎに、ホームページのファイル「sample.shtml」中の、SSI命令で読み込まれるHTMLファイルを作ります。
「<p>ここがホームページのヘッダー部となります。</p>」と書いて、「header.html」という名前を付けて保存します。
同じように、「<p>ここがホームページのフッターで~す。</p>」と書いて、「footer.html」という名前を付けて保存します。
3つのファイルを同じフォルダ内に入れて、「sample.shtml」にアクセスすると、以下のように表示されます。
ここがホームページのヘッダー部となります。
本文、ここにコンテンツが入ります。
ここがホームページのフッターで~す。
SSIの設定を間違えると、[an error occurred while processing this directive]などと表示されます。
SSIでのファイル読み込み
ファイル読み込みのSSIコマンド(命令)、#includeについてもう少し詳しく説明します。
SSIのファイル読み込みコマンド、#includeには、2種類の方法があります。
<!--#include file="~"-->
<!--#include virtual="~"-->
どちらのSSI命令も、指定したファイルの中身を読込んで表示します。
ウェブページとしての表示結果は同じですが、多少SSIの指定方法が違います。
SSIのファイル読み込みを指定する「#include」命令の、「file="~"」の「~」には、ファイル名を指定します。
SSIを動作させる環境によっては「../」や絶対パスは使用できない場合があります。
SSIのファイル読み込みを指定する「#include」命令の、「virtual="~"」の「~」には、指定するファイルの仮想パスを指定します。
仮想パスとは、わかりやすく説明すると「http://xxx.com/abc…」の「/abc…」の部分のことです。
<戻る>
SSIの変数設定
SSIで変数を使用する方法を紹介します。
変数とは、Perl/CGI入門講座で説明しましたので詳しくはそちらを参照してください。
SSIの変数も、文字列などを代入し、ホームページに表示させることができます。
SSIで変数を宣言するためには、「#set」命令を使います。
SSIの変数の宣言とは、今からこんな名前の変数をSSIでつかいますよと、インターネットサーバーに呼びかけている動作だと思ってください。
SSIで使用する変数を宣言して、実際に文字列などを代入するには、以下のように記述します。
<!--#set var="…" value="~"-->
SSIの変数「…」に、値「~」を代入するといった感じで使います。
そして、SSIで宣言した変数を呼び出して表示させるには、「#echo」命令を使います。
それでは、SSIで変数を使用してみます。
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<title>SSIサンプル</title>
</head>
<body>
<!--#set var="message" value="Hello!!"-->
<!--#echo var="message"-->
</body>
</html>
このホームページファイルを、「sample.shtml」などと名前を付けインターネットサーバーにアップロードして、アクセスすると「Hello!!」と表示されます。
SSIの変数処理は、Apache 1.2以上のバージョンで使用可能です。
SSIの基本的な知識としては、だいたいこのあたりぐらいまでを理解していれば、SSIのみであれば問題ないです。
いろいろなSSIの使用方法を紹介してきましたが、このあたりぐらいまでであれば、だいたいどこのレンタルサーバー会社のインターネットサーバーでも使えると思います。
しかし、この記事の最初にも書きましたが、SSIとCGIを組み合わせれば、もっとおもしろいホームページを作成することができます。
ここから先は、SSIとCGIを組み合わせたホームページ作成について紹介しますが、レンタルサーバー会社のインターネットサーバーによっては、うまく動作しない場合があります。
このような、インターネットの技術的な知識がついてきてはじめて、レンタルサーバー会社の違いを実感し、レンタルサーバー会社を比較する重要性を初めて理解するのではないかと思います。
私もそうでしたから(笑)。
そのうち、レンタルサーバー会社を比較するポイントなども紹介していきたいと思います。
<戻る>
SSIのコマンド実行
SSIのコマンド実行について掲載します。
このあたりからは、SSIでも中級者レベルになってきます。
SSIでコマンド実行をするには、「#exec」といった命令を使います。
SSIのコマンド実行「#exec」の記述方法は大きく2種類あります。
<!--#exec cmd="~"-->
<!--#exec cgi="~"-->
SSIのコマンド実行「#exec」で、「~」で指定したコマンドやCGIを実行し、その結果を表示させます。
しかし、SSIのコマンド実行「#exec cmd」は、直接コマンドを実行することができることから、インターネットサーバーのセキュリティー保護のため使用できないところが多いです。
ですから、あまり実用的なSSIではありません。
もちろん、「#exec cmd」をコマンド以外で、CGIを呼び出して使用するぐらいなら、使用を許可しているインターネットサーバーもあります。
まぁでもそうやって使うのでしたら、「#exec cgi」の方で十分です。
SSIのコマンド実行「#exec cgi」を使うと、PerlプログラムなどのCGIを呼び出し実行させ、結果を表示させることができます。
例えば、以下のようなCGIを準備します。
#!/usr/bin/perl
print "Content-type: text/plain\n\n";
print 'Hello!!';
exit;
このPerlスクリプトを、「sample.cgi」と名前を付けて、インターネットサーバーにアップロードします。
そして、パーミッションを実行可能な「755」などに設定します。
次に、CGIを呼び出すSSIのコマンドが書かれたホームページファイルを準備します。
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<title>SSIサンプル</title>
</head>
<body>
<!--#exec cgi="./sample.cgi"-->
</body>
</html>
このホームページファイルを、「sample.shtml」などと名前を付けインターネットサーバーにアップロードして、アクセスすると「Hello!!」と表示されます。
SSIの設定を間違えると、[an error occurred while processing this directive]などと表示されます。
「./sample.cgi」は、「sample.cgi」までのパス名を記述します。
この場合は、同じフォルダ内に「sample.cgi」があるということになります。
このSSIとCGIプログラムを利用した代表が、アクセスカウンターCGIです。
ちなみに、CGIへのパス名を指定した後、スペースを空けて引数を指定することで、値をCGIにわたすこともできます。
そのとき、perlスクリプトで引数を受け取るには、@ARGVを参照します。
@ARGVとは、一言で説明すると、コマンドラインの引数が入っている配列のことです。
しかし、これもインターネットサーバーのセキュリティー保護のためなのか、SSIの機能が制限されているレンタルサーバー会社もあります。
このあたりは、マニュアルに従っていればよいという部分ではないので、SSIやPerl初心者の方には、少しきついかもしれません。
インターネットサーバーのソフトウェアのバージョンや、設定によりSSIの機能というのは、大きく左右されます。
また、SSIの機能自体が使えても、パスの指定方法などが、ある程度統一されているインターネットサーバーもあります。
例えば、絶対パスを指定できないとか、パス名で上位のディレクトリ(..)を参照できないなどなどです。
このあたりは、レンタルサーバー会社のホームページで調べる必要があります。
<戻る>
SSIの条件分岐
SSIもPerl/CGI入門講座で学習した条件分岐(if文)を使用することができます。
SSIの条件分岐(制御構文)は、記述の仕方は違いますが、感覚的には、Perlプログラミングで解説したif文と同じです。
SSIの条件分岐命令は、以下のようなものがあります。
<!--#if expr="~"-->
<!--#elif expr="~"-->
<!--#else -->
<!--#endif -->
SSIの条件分岐命令の「#else」や「#endif」には、すぐ後ろにスペースが入ります。
SSIの条件分岐命令は、条件によって表示する内容を変化させます。
SSIの条件分岐で使用できる条件演算子には、以下の種類があります。
等しい(=)。
等しくない(!=)。
小さい(<)。
等しいか小さい(<=)。
大きい(>)。
等しいか大きい(>=)。
否定(!)。
かつ(&&)、または(||)。
こんな感じで使用します。
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<title>SSIサンプル</title>
</head>
<body>
<!--#if expr="$HTTP_ACCEPT_LANGUAGE = ja"-->
私のホームページへようこそ!
<!--#else -->
Welcome to my Homepage!
<!--#endif -->
</body>
</html>
HTTP_ACCEPT_LANGUAGEとは、インターネットエクスプローラなどのブラウザソフトで、設定されている主要言語のことです。
つまり、ブラウザで日本語の設定をしている人には日本語で表示し、それ以外の場合は、英語で表示されるというわけです。
インターネットエクスプローラでは、ツール(T)から、インターネット オプション(O)...を選択し、言語(L)...で設定言語を確認することができます。
SSIの条件分岐では、正規表現も使用できます。
SSIの条件分岐で正規表現を使用するときには、「/.../」といった感じで、「/」ではさみます。
それでは、正規表現で文字列のマッチング処理をさせてみます。
<html>
<head>
<META HTTP-EQUIV="Content-type" CONTENT="text/html; charset=Shift_JIS">
<title>SSIサンプル</title>
</head>
<body>
<!--#if expr="$HTTP_USER_AGENT = /compatible; MSIE/"-->
Internet Explorer を使っていますね。
<!--#else -->
Internet Explorer を使っていませんね。
<!--#endif -->
</body>
</html>
HTTP_USER_AGENTとは、ブラウザーがインターネットサーバーに伝えるHTTP環境変数の一つです。
HTTP_USER_AGENTとは、通常であれば、バージョン名を含んだ、ブラウザーの名称となっています。
もう見てわかるように、ホームページにアクセスしたブラウザーが、インターネットエクスプローラかそうでないかを判断しています。
<戻る>
SSIのエラーメッセージ
ここまで、ホームページ作成に役立つSSIの活用法をいろいろと説明してきました。
最後に、SSI動作時に、もし何らかのエラーが発生したときのためのエラーメッセージを設定する方法について紹介します。
SSIでエラーメッセージを設定するには、「#config errmsg」という命令文を使います。
SSIでエラーメッセージを設定する「#config errmsg」は、以下のように記述します。
<!--#config errmsg="~"-->
「~」の部分に、文書処理中にエラーが発生した場合のエラーメッセージを指定します。
そして、このSSIで設定したエラーメッセージは、インターネットサーバーのエラーログにも記録されます。
SSIについては以上です。
ここまでざっと、SSIについて説明してきました。
今回説明したSSIは、実際に動作させるインターネットサーバーによって、使える機能と使えない機能の差が極端なシステムです。
ですが、SSIとCGIを組み合わせるなどすれば、ホームページが楽しくなるような仕掛けも考えることができるので、実際にSSIを使って、いろいろと試してみてくださいね。
<戻る>