そこで、ユーザページにカウンタでも付けてみます。ここでは、SSIとCGIを使った簡単なグラフィックカウンタでいきます。
プロバイダのサーバでは自由が利かない場合がありますが、自分が管理するマシンなので、SSIもCGIもやりたい放題がいいですね。
初心者の場合には、アクセスカウンタというと、どっかでサービスしてるのを借りるものという程度で、あまり深く考えたことはないでしょうが、カウンタを自力で設置するには、少々スキルとある程度広範な知識が要求されますのでそのつもりで...
画像の用意ができたら、ディレクトリの整備をします。~/public_html/cgi-bin/counter というディレクトリを作成し、そこに先ほどの画像を移動します。ここでは、ファイル名をそれぞれ、0.gif 1.gif ... 9.gifとします。 さらに、カウンタ値を格納するファイルを次のように作成します。
$ cd ~/public_html/cgi-bin/counter $ vi cnt ... ファイルの中身は0を入力し保存 ... $ chmod o+w cnt
また、ロックファイル作成用ディレクトリを公開ディレクトリ以外の場所に作成し、apacheが書き込みできるようにパーミッションを設定します。
$ mkdir ~/tmp $ chmod o+w ~/tmp
もちろん、スクリプトが呼び出す各コマンドは、whichとかwhereisとかを使用してマシンの環境に合わせます。
#! /bin/sh COUNT=/home/yoshio/public_html/cgi-bin/counter/cnt LOCK=/home/yoshio/tmp/lock /bin/ln -s $COUNT $LOCK && (\ NUM=`/bin/cat $COUNT`;\ echo $NUM + 1 | /usr/bin/bc > $COUNT;\ /bin/cat $COUNT | /home/yoshio/public_html/cgi-bin/counter/ntoi;\ /bin/rm $LOCK)コマンドの使い方については、manページを参照してください。
スクリプトを作成したら、Apacheが実行できるようにパーミッションを設定します。
$ chmod o+x cnt.shこのスクリプトは、htmlファイルからSSIとして呼び出され、ロックファイルを作成し、カウンタ値をインクリメントして保存し、その値をCGIに引渡して、ロックファイルを解除するものです。
include <stdio.h> void main() { char s[16]; int c,i,j; for(i=0; i<=5; i++) s[i] = '0'; while((c=getchar()) != EOF) s[i++] = c; i -= 7; for(j=0; j<=5; j++) { c=s[i+j]; printf("<img SRC=\"/~hogehoge/cgi-bin/counter/%c.gif\" ALT=\"%c\">",c,c); } }hogehogeはユーザ名に置き換えてくださいね。また、カウンタ用画像をJpegで用意した場合には、printf関数呼び出しの中の文字列gifをjpgなどと置き換えてください。
ソースを保存したら、コンパイルして実行ファイルを作成します。
$ gcc -o ntoi ntoi.cgccは使っているシステムによりc86とかccとかの場合があります。
Options ExecCGI Includesまた、ハンドラを次のように設定します。
AddHandler cgi-script .cgi AddType text/x-server-parsed-html .htmlここでの設定は、あくまでイントラネット用を前提としてます。インターネットに接続するサーバの場合には、セキュリティ面を考慮したやりかたに変えたほうが良いでしょう。
<!--#exec cmd="./cgi-bin/counter/cnt.sh"-->うまく動かない場合には次の点をチェックします。