なには、ともあれ、動かしてみるはい、それらしく出来てきました。
ctr-ex1.pl の中身 パーミッションは 700
ctr-ex1.pl は cgi ではなく、 ssi.cgi から起動されるプログラムとなるので、 拡張子は .cgi である必要はありません。 パーミッションを 700 にして実行を許可します。
perl で SSI 風の機能を作ってしまう
SSI というのは、html で記述したページのなかで、プログラムの実行を指定して、 そのプログラムの出力をページ内に入れることができたりする機能です。 サーバー側で入れてくれるので、サーバーサイドインクルード(SSI)といいます。
とっても、便利なのですが BIGLOBE では SSI はつかえません。
つかえないなら、つくってしまえ! ということで SSI もどきを作成してカウンターを表示することにします。SSI は、こんな記述をします。
<!--#exec cmd="./count.pl" -->
以下のような形式でパラメータも渡すことが出来るようにします。
<!--#exec cmd="./count.pl count.dat" -->
で、こうした記述を .htm に書いておくと couunt.pl を実行してその結果を組み込んでくれるようにしたいと思います。
ssi.cgi は以下のようにして起動します。
<A HREF="./ssi.cgi ctr-ex1.htm">
ctr-ex1.htm が表示されるのですが、そのとき ctr-ex1.htm 内に書いてある
<!--#exec cmd="./ctr-ex1.pl ctr-ex1.dat" -->
という記述を ctr-ex1.pl の実行結果をおきかえて表示します。
以下のような動作になります。
???わはは、分かりにくい説明ですね(^^;;;
- ssi.cgi を起動する。
- ssi.cgi は、引数として渡された ctr-ex1.htm を読み込んで表示する
- ctr-ex1.htm の中に ./ctr-ex1.pl を実行する記述がある。
- ssi.cgi は、./ctr-ex1.pl を実行し、その結果を ctr-ex1.htm に埋め込んで表示する。
説明を読んでいるより、実際に動かしてみた方がわかりやすいかもしれません (^^;;;
ssi.cgi で出来ること
NCSA による SSI の解説(英語)
- ./ssi.cgi?HTMLファイル名 で起動します。HTMLファイル名を省略すると welcome.htm となります。
- <!--#config timefmt="%y/%m/%d %H:%M:%S" --> 日付、時刻の形式の指定
date コマンドでの指定が使えます。記述の説明- <!--#echo var="環境変数名" --> 環境変数の表示
- <!--#echo var="DATE_LOCAL" --> 日付、時刻の表示
- <!--#echo var="DATE_GMT" --> GMT での日付、時刻の表示
- <!--#echo var="REMOTE_HOST" --> HOST 名に変換して表示
- <!--#exec cmd="コマンドライン" --> プログラムの実行
直接、ctr-ex1.htm を指定したのでは、アクセスカウンターは、 表示されないことになります。一番アクセスカウンターをつけたい index.htm なんかだと困りますよね! なんとか起動してみましょう。
index.htm を ダミーにして、そこから Refresh で CGI を起動する。
ダミーから起動する注意が必要なのは、自分のホームページから戻るときです。 仕掛けのしてあるダミーの index.htm に戻ると reload されてしまって、 キャッシュから表示しないので時間がかかるし、 戻るたびにカウントアップされてしまいます。 自分のページ内では、ダミーの index.htm へ戻らないで ssi.cgi?ctr-ex1.htm へ戻ると、キャッシュから読み込んでくれるようです。、
index.htm を frame にして、そこから CGI を起動する。
フレームから起動するフレームを使った場合は、<FRAME> から起動します。 ちゃんとキャッシュから読んでくれるようです。
ここまで、くるといろんな事に気が付きます。
perl のエラーもみることが出来るようになりました。 この成果は、ふろく でごらんください。