.
.
.
.
.
TOPページ(Alt+B)
.
acclog.cgi詳細解説

#!/usr/local/bin/perl
#perlのパスを指定します。プロバイダによって多少異なることもありますので、確認しておきましょう。

$data_file = "acclog014.dat";
#データを格納しておくファイルを指定します。尚、書き込み可能なファイルは上記のように後ろに数字をつける等、他の人に判り難い名前を付けておきましょう。

#以下はタイプスタンプです。まず始めに現在時刻を、秒・分・時・日・月・年・週といった各変数へ分割して代入しておきます。mon++としたのはサーバー内で扱う時計は月の数を1つ増やすことになっているからです。下の2行で日本語表示が可能になります。
( $sec,$min,$hour,$day,$mon,$year,$wday ) = localtime(time);
$mon++;
@week = ('日曜日','月曜日','火曜日','水曜日','木曜日','金曜日','土曜日');
$wday = $week[$wday];

print "Content-type: text/plain\n\n";
#出力形式を決めるヘッダです。plainテキストにしてありますが、htmlにしてもいいです。ブラウザはまずこの1行を受け取ってから、どのように表示するかを決定します。ここの\nは「改行」を意味します。それから遅くなりましたが、perlの命令文の行の最後には;を付けます。コメントは#に続けて記述します。

open(LOGMEMO, ">>$data_file") || die "Counter Write Error.......\n";
flock($data_file,2);
seek($data_file,0,0);
#これはファイルのオープンとロックをかける命令です。ロックするのは古い数値を読み込んでいる間に、よそから書き込めないようにするためです。

print LOGMEMO "_________________________________\n";
print LOGMEMO "$year年$mon月$day日$wday:$hour時$min分$sec秒 \n";
print LOGMEMO "リンク先.........................$ENV{'HTTP_REFERER'}\n";
print LOGMEMO "ブラウザ.........................$ENV{'HTTP_USER_AGENT'}\n";
print LOGMEMO "リモートアドレス............$ENV{'REMOTE_ADDR'}\n";
print LOGMEMO "リモートホスト...............$ENV{'REMOTE_HOST'}\n";
print LOGMEMO "リモートIDENT................$ENV{'REMOTE_IDENT'}\n";
#各ログ(環境変数)の書き込みを行います。

close(LOGMEMO);
flock($data_file,8);
#書き込みが終了したら、ファイルをクローズしてロックを解除します。

環境変数の書き込み部分を更に詳細に見てみると、printは〜を表示しなさいという命令文になります。また、%ENVで環境変数の値を参照することができます。つまり、print "$ENV{'環境変数'}";とすれば環境変数を表示することができるわけです。

よく使用される環境変数

HTTP_REFERER:CGIスクリプトがどこから呼び出されたか、つまり一つ前のURLです。これにより、どこから自分のところへ訪問してきたのかが分かります。

HTTP_USER_AGENT:訪問者が使用しているブラウザやコンピューターの種類を知ることができます。

REMOTE_ADDR:訪問者のIPアドレスです。

REMOTE_HOST:これにより訪問者が使用しているプロバイダ名を知ることができます。

REMOTE_IDENT:あなたのCGIにアクセスしているユーザーを認証するシステムですが、IDENTED認証というものをサーバーが実行している場合にセットされます。

戻る(Alt+R)

CopyRight (C) 2000-2013 by T.Shiraishi All right reserved 無断転載禁止/リンクフリー