※このサンプルの解説は、「CGI(Perl)の解説」をすべて読み終えてる方を前提としています。
■ アクセスログの作成
それでは今までの解説でアクセスログを作成するための準備ができましたから、アクセスログを作ってみましょう。
アクセスログに記録するものは次のようなものとします。
1.日付・時刻..サーバーの持つ現在の日時を使用します。
2.表示されたページ ..自サイトの訪問者が見ているページ
3.リファラー(referer)..どのサイトから訪問してきたか、俗に言うリンク元(逆リンクとも言う)。
4.訪問者のエージェント..アクセスをしたときのOS、ブラウザなど。
5.訪問者のホスト..プロバイダから与えられるIPアドレスに割り当てられたサブドメイン名のようなもの。
6.訪問者のIPアドレス..プロバイダから与えられる、世界に1つしかない接続番号のようなもの。
これ以外の情報も記録できますが、もっと知識が増えてからでいいでしょう。
- 【 解 説 】
-
まず、上記にあげた項目をそれぞれ一度変数にセットしておきます。
その記述方法は次の通りです。
($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(); $fmt0 = "%04d/%02d/%02d %02d:%02d:%02d"; $day0 = sprintf($fmt0, $year+1900,$mon+1,$mday,$hour,$min,$sec); $hpadrs = $ENV{'REQUEST_URI'}; $refer = $ENV{'HTTP_REFERER'}; $agent = $ENV{'HTTP_USER_AGENT'}; $hostnm = $ENV{'REMOTE_HOST'}; $ipadrs = $ENV{'REMOTE_ADDR'};そして、これらをカンマ区切りで羅列し、指定したファイルに追加方式で記録します。
その記述は次の通りです。
$filnam = "acclogf.cgi"; open(FP,">>$filnam"); print FP "$day0,$hpadrs,$refer,$agent,$hostnm,$ipadrs\n"; close(FP); ※ファイルの読み込みや書き込みについては「CGIの予備知識」で解説します。なお、文字列中の最後の「\n」は、改行マークのことです。
今回、アクセスログのファイル名は「acclogf.cgi」としました。
このファイル名は何でもいいのですが、セキュリティの意味で拡張子は「.cgi」
にしておくことをお勧めします。このようにしておくと、訪問者がこのファイルを覗こうとした時、自動的にCGIとして実行しようとしますが、中身がCGIではないのでエラーが発生します。
したがって、覗こうとしてもエラーが発生して覗けなくなるからです。
では、上記の内容を使用して「アクセスログ」を作成してみます。
「アクセスログ」は情報を記録するだけで表示はありませんから次のようになります。
なお、今回のサンプルでは排他制御(同時書き込み時の制御)は行っていません。
Windows環境の排他制御については「CGI(Perl)の予備知識」−「ファイル書き込みの排他制御」をご参照下さい。
- 【記述サンプル】
- #!/usr/bin/perl ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(); $fmt0 = "%04d/%02d/%02d %02d:%02d:%02d"; $day0 = sprintf($fmt0, $year+1900,$mon+1,$mday,$hour,$min,$sec); $hpadrs = $ENV{'REQUEST_URI'}; $refer = $ENV{'HTTP_REFERER'}; $agent = $ENV{'HTTP_USER_AGENT'}; $hostnm = $ENV{'REMOTE_HOST'}; $ipadrs = $ENV{'REMOTE_ADDR'}; $filnam = "acclogf.cgi"; open(FP,">>$filnam"); print FP "$day0,$hpadrs,$refer,$agent,$hostnm,$ipadrs,<br>\n"; close(FP);