※ここの解説は、後になるほど省略されている場合がありますのでできるだけ順番に読んでください。
■ 15.自作アクセスカウンタ
それでは、この「CGI(Perl)の解説」のまとめとしてアクセスカウンタを自作してみましょう。
難しそうに思えるかもしれませんが、思ったよりも簡単です。
ただし、最低限の機能しかありませんので、より高度なものを望まれる方は、専門書などでさらに力を付けてください。
まず、アクセスカウンタは何をしているかを知らないといけません。
- 現在記憶しているカウンタ値を読み込んできます。
- その数値に1を加算します。
- 加算後の数値を元の場所に書き出します。
- その後、そのカウンタ値を表示します。
以上のことをPerlで記述します。
それでは、順を追って説明して行きます。
■ アクセスカウンタの作成
それでは、まず、カウンタ値を記憶するためのファイルが必要になります。
そこで、テキストエディタなどで、次のようにカウンタの初期値を入力したものを作成します。
この文章を「count.dat」と名前を付けて、「cgi-bin」フォルダに保存しておきます。
次にアクセスカウンタのCGIを作成します。
上記のカウンタ値を読む処理は次のようになります。
このカウンタ値に1加算するにはインクリメント演算子を使用して次のように記述します。
そして、この値を元のファイルに書き出すには次のように記述します。
次に、このカウンタ値を表示するには次のように記述します。
したがって、サンプルは次のようになります。
- 【記述サンプル】
- #!/usr/bin/perl open(FILE,"<count.dat"); $count = <FILE>; close(FILE); $count++; open(FILE,">count.dat"); print FILE $count; close(FILE); print "Content-type:text/html\n\n"; print $count;
■ アクセスカウンタの実行
さあ、これを前回と同様にエディタなどで作成し、「count.cgi」と名前を付けて、「cgi-bin」フォルダに保存します。
実行方法は、今までと同じです。
アドレスには「//127.0.0.1/cgi-bin/count.cgi」と入力します。
どうですか?正常に表示されましたか?
それでは、このカウンタをHTML文書に埋め込んでみましょう。
■ HTML文書に表示
上記のようなアクセスカウンタをHTML文書から呼び出す場合は次のように記述します。
カウンタを表示したい場所に上記の記述を追加します。
例えば、アクセスカウンタを呼び出すHTML文書は次のように記述します。
- 【記述サンプル】
- <HTML> <HEAD> <title>アクセスカウンタのテスト</title> </HEAD> <BODY TEXT="purple" BGCOLOR="#99ff99"> あなたは、 <!--#include virtual="count.cgi" --> 人目のご訪問者です。 </BODY> </HTML>
この文章をエディタなどで作成し、「count.html」と名前を付けて、「cgi-bin」フォルダに保存しておきます。
ここでの、注意点は、ファイルの拡張子を必ず、「shtml」にして下さい。
そうしないと、カウンタは表示されません。
■ HTML文書からのアクセスカウンタの実行
実行方法は、今までと同じです。
アドレスには「//127.0.0.1/cgi-bin/count.html」と入力します。
どうですか?正常に表示されましたか?
■ アクセスカウンタの実行がうまくいかないケース1
サーバーによっては、「cgi-bin」フォルダ内の「count.html」では、CGI(SSI)が、呼び出せない場合があります。
その場合は、ファイルを次のように設置してください。
括弧内はパーミッションです。
├count.html
└cgi-bin(755)
├count.cgi(755)
└count.dat(666)
そして、呼び出し方法を次のように変更します。
■ アクセスカウンタの実行がうまくいかないケース2
「shtml」から「cgi」を呼び出す場合、「include virtual」の方法を説明しましたが、この呼び出しが使えないサーバーもあります。
その場合は、このサイトのトップページ、「HP作成の予備知識」−「13.CGIの結果をHTML文書に埋め込みたい。(SSI)」も参照してください。
■ アクセスカウンタの実行がうまくいかないケース3
「shtml」のページに不要な文字列「Content-type:text/html」が表示される場合は、下から2行目を次のように「#」でコメントにします。