アクセスログ保存
#! /usr/local/bin/perl
$CHARSET = 'Shift_JIS';
$COOKIENAME = 'cookiecount'; # クッキー名
$COOKIELIFE = 30; # クッキー有効期限
$LOG = './dat/log.dat'; # ログ保存ファイル
$LOGMAX = 1000; # ログ保存件数
loadCookie(); # 訪問回数読み込み・保存
writeLog(); # ログ保存
print qq(Content-type: text/html; charset=$CHARSET\n);
print qq(Set-Cookie: $COOKIENAME=$cookiecount; expires=$expires;\n\n);
print qq(<html>\n);
print qq(<head>\n);
print qq(<title>アクセスログ保存</title>\n);
print qq(</head>\n);
print qq(<body>\n);
print qq(<table>\n);
print qq(<th colspan="2">アクセスログ保存しました</th>\n);
($count, $tm, $agent, $addr, $referer, $cookiecount) = split(/\t/, $LOG[0]);
print qq(<tr><td>アクセスカウンター</td><td>$count</td></tr>\n);
print qq(<tr><td>時間(ミリ秒)</td><td>$tm</td></tr>\n);
print qq(<tr><td>ユーザーエージェント</td><td>$agent</td></tr>\n);
print qq(<tr><td>IPアドレス</td><td>$addr</td></tr>\n);
print qq(<tr><td>リンク元</td><td>$referer</td></tr>\n);
print qq(<tr><td>訪問回数</td><td>$cookiecount</td></tr>\n);
print qq(</table>\n);
print qq(</body>\n);
print qq(</html>\n);
exit;
#================================================ ログ保存
sub writeLog
{
my $time = time;
open(FILE, "+<$LOG");
eval{ flock(FILE, 2) };
@LOG = <FILE>;
my ($count) = split(/\t/, $LOG[0]);
$count++;
unshift @LOG, "$count\t$time\t"
. "$ENV{'HTTP_USER_AGENT'}\t$ENV{'REMOTE_ADDR'}\t$ENV{'HTTP_REFERER'}\t$cookiecount\t\n";
while(@LOG > $LOGMAX) { pop @LOG; }
seek(FILE, 0, 0);
print FILE @LOG;
close FILE;
}
#================================================ クッキーデータ読み込み・作成 (訪問回数)
sub loadCookie
{
$cookiecount = 0;
my ($pair);
# クッキーデータ取り込み
foreach $pair (split(/;\s*/, $ENV{'HTTP_COOKIE'})) {
my ($name, $cookie) = split(/=/, $pair);
if($name eq $COOKIENAME) {
$cookiecount = $cookie;
last;
}
}
# クッキーデータ作成
$cookiecount++; # 訪問回数+1
@mon = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec);
@wdy = qw(Sun Mon Tue Wed Thu Fri Sat);
$life = $COOKIELIFE * 24 * 60 * 60;
($sec, $min, $hour, $day, $mon, $year, $wday) = gmtime(time + $life);
$expires = sprintf("%s, %02d-%s-%04d %02d:%02d:%02d GMT",
$wdy[$wday], $day, $mon[$mon], $year + 1900, $hour, $min, $sec);
}
〔 実行する 〕