SSIーカウンターが、TeX4htで働かなかったので、CGI-カウンターを試みた。
方法は、坂田健二著「Windows で学ぶ CGI & Perl」技術評論社: 第4章第4節をそのまま持ってきた。
(2.1) cgi_count_foo.cgi: アクセス回数を計算し、”fly”等を呼び出して数字の画像を製作させ、標準出力に出力する。(2.2) fly: GIF画像をその場で作るプログラム。
flyのサイトからダウンロードできる。ウインドウズ版は、実行可能なバイナリーfly.exeを持ってこれる。サーバーのOSがリナックスの場合 fly-1.6.5.Linux-2.1.125-i686.tar.gz をダウンロードし、
gunzip fly fly-1.6.5.Linux-2.1.125-i686.tar.gz
を実行すると、tar ファイルができるので
tar xvf fly-1.6.5.Linux-2.1.125-i686.tar
を実行すると、fly-1.6.5 ディレクトリーが作られその中にflyの実行ファイルができる。これを、上記の
cgi_count_foo.cgi と同じディレクトリーに置く。
(2.3) gifcmb.pl: 画像を合成する Perl スクリプト
(2.4) sub_lock.pl: 計数を処理している間カウンターをロックしておく Perl スクリプト
(2.5) counnter_foo.log: カウンター数保管場所
(2.5) 数字(0~9)の画像ファイル
(3.1) パッケージを置く場所: ~/cgi-bin/cgi-counter/
カウンターを置く場所: ~/cgi-bin/cgi-counter/counters
数字画像を置く場所: ~/cgi-bin/cgi-counter/images
○カウンターはエディターで空のファイルを作り、初期値数字"0"を入れておく。
(3.2) gifcmb.pl の設定: 「CGI & Perl」の付属CDROMより持ってくる。
○$fly_cmd="./fly"; # fly のパス(格納場所)
に、flyの格納場所のパスを記入する。
なお、ファイル名はウインドウズの場合は "fly.exe"と書き、リナックスの場合は単に"fly"と書く。
(3.3) cgi_count_foo.cgi: 「CGI & Perl」の付属CDROMより持ってくる。
○1行目: #!/usr/bin/perl と記入: 大抵のリナックスの場合
#!d:/perl/bin/perl と記入: ウインドウズの場合( Perl を格納した所)
○4行目: require "./gifcmb.pl"; gifcmb.pl のパスを指定。
○5行目: require "./sub_lock.pl"; sub_lock.pl のパスを指定。
○7行目: $countfile="./counters/count_foo.log ; カウンターのパス指定
注: 8行目の lockdir は作らない。これは sub_lock.pl により自動的に作られる。
○10,11行目: $width="11"; 数字の画像ファイル(数字一桁)のサイズを指定。
$height="14";
判らないときは、「Image Size for HTML」というプログラム(imgsize.exe)を使って調べる(フォトショップでも可能)。アイコンに画像ファイルをドラッグすればよい。
○30行目: $count_img=sprintf("%04d",$count); 表示桁数の指定(6桁の場合4->6)
(3.4) html ファイルの中のアクセスカウンターを表示したい 場所に
<p align="center"><img src="http://・・・・・~/cgi-count/cgi-count/cgi_count_foo.cgi></p>
を記入する。
全てのパッケージは、~/cgi-bin/cgi-counter/ の中に置いてあり、多くは共通である。
サイト製作毎に最低限作らなければならないのは
(4.1) 新サイトのアクセスカウンターを表示したいところに
<p align="center"><img src="http://・・・・・/~/cgi-count/cgi-count/cgi_count_bar.cgi></p>
記入し、
(4.2) cgi-count_foo.cgi: の名前(foo)を付け替え(foo --> bar)、中の○7行目で
$countfile="./counters/count_bar.log ;
カウンターのパスを指定し、
(4.3) counter_bar.log ファイルを作り、~/cgi-bin/cgi-counter/counters に置く。
だけである。