アクセスログ保存
#! /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); }
〔 実行する 〕