トップページにカウンターをどう表示するのか
SSI - Server Side Includeを使う
以上がカウンターの仕組みなのですが、一つ困ったことがあります。トップページにカウンターをつけたいのですが、動的に変わる場所はカウンターだけです。そのためだけに、ページの全てをCGI用のWebプログラムで作る必要があるからです。なんとかカウンター部分だけ、というようにできないでしょうか?
そこで、よく使われるのが Server Side Include(SSI) という技術です。これは、HTMLの中に動的な内容を組み込んで表示できるようにする技術です。
先ほどのプログラム「count.cgi」を、カウンターを表示させたいHTMLファイルに
<!--#exec cgi="count.cgi"--> (*一例です)
というようにして記述することで、index.htmlの中にカウンターだけ表示させることができます。また、SSIを利用した場合には、index.htmlのソースを開いたときに、CGIプログラムを起動している痕跡さえ残りません。見た目は通常のHTMLのようなソースになります。
ただ、SSIを利用するときは、サーバーの設定によって、HTMLファイルの拡張子を「*.html」ではなく「*.shtml」にする必要があるかもしれません。または、「.htaccess」という設定ファイルでSSIを有効にする必要がある場合もあります。(これはサーバーに対する負荷を軽減するためです。)
SSIのサンプルがありますので、こちらからどうぞ。(別窓)
HTMLファイルなのにカウンターの数字が変化します。(不思議です・・・)
しかし、プロバイダーから提供されるHPスペースや、ホスティング等のサービスでも SSI を許可していないところが少なくありません。これはセキュリティー上の理由からですが、そうすると、カウンターを実装できないか?というとそうでもありません。
画像を出力するCGI用スクリプトとして表示させる方法
CGI用Perlを配布しているサイトで配られているカウンター用プログラムでは、SSIが使えないような問題を解決するために、様々な手法が取られています。
例えば、画像をCGIとして出力させることは可能なので、カウンターの番号を画像として表示させるのが一般的にされていることです。HTMLソースを見てみると、
<img src="./cgi-bin/counter.cgi">
というような形でHTMLに組み込まれています。 「おや?」と思われた方もいるかもしれません。そうなんです。「プログラムの起動のさせ方」のページで色々なプログラムの起動方法を紹介しましたが、Webプログラムを呼び出すのに、IMGタグで呼び出すことも可能なのです。ただし、このプログラムの出力を
print "<img src='1.gif'><img src='5.gif'>";
としても、うまく表示されません。
これは、よく考えてみると当たり前で、「<img src="./cgi-bin/counter.cgi">」というように画像として読み出しているわけですから、CGIの出力も画像である必要があります。
print "Content-Type: text/html\n\n";
↓
print "Content-Type: image/gif\n\n";
上のように、ファイルのヘッダーをHTMLというテキストではなく、「画像でGIFファイルですよ~」っと教えなおす必要があり、そのあと出力する内容もGIF画像そのもの・・・ということになります。しかも、GIF画像1枚分だけの出力しかできません。
カウンターですので、数字は毎回変わります。だから、カウンターの数字の桁ごとに画像を表示するプログラムにしてやる必要があり、それをHTMLファイルの中に下のように書いてプログラムを呼び出すことになります。
<img src="count.cgi?keta=5">
<img src="count.cgi?keta=4">
<img src="count.cgi?keta=3">
<img src="count.cgi?keta=2">
<img src="count.cgi?keta=1">
たかがカウンター・・・。訪問者数を記録するのは簡単でしたが、実際に表示させるにはかなり苦労が必要みたいですね(^^; ただ、このようなカウンターの起動方法の場合、単純に見ても5つのプログラムが動きます。そして画像を表示させるわけですから、サーバーには負荷がかかってしまいます。
また、このように画像をバラバラに表示させないようにするために、「とほほのWWW入門」で配布されている「gifcat.pl」というGIF画像連結用のモジュールを利用して、カウンターを作って配布しているものもよく見ます。(Kent-Webのカウンターがそうですね。)
上記のプログラムのサンプル等は説明すると長すぎて、しかも難しくなるので、もっとあとで扱いたいと思います。たしかに、ページにカウンターって必要なの?って議論もありますしね(^^;(自分がよくわかってない、というのも理由ですが・・・)





