本日  昨日
 
03/16(Sun) 00:33

ログ記録CGI webaxs.pl の改造
★「おしらせ」★
「OS&ブラウザ名の取得」部分を最新に更新しました。WindowsXP、2000、MEやMac、UNIX、携帯機種等のOS判別が詳細にできるようになります。(2001/12/09)

改造項目
  1. データ項目の追加
    (1)webaxs.plはログ記録ファイルlog.csvに次のデータを記録します。
    時刻(時),リンク元,リモートホスト名,ブラウザ名
    (2)このデータに以下のデータを追加する改造を行います。
    訪問日,時刻(分),カウンター数,再訪問回数

  2. InfowebのDNS逆引き中止対策として、Look Up Table(ファイル名 ipmas.dat)によるIPアドレスからホスト名を取得するスクリプトの変更。

  3. 再訪問回数を得るためのクッキー処理ルーチン decode_cookie の追加

  4. ブラウザの詳細情報の取得
あなたが準備するファイルとデータ
  1. この改造は、下記の2つのファイルから単にデータを読み込んで、log.csvに書き出すだけです。従って別に、他のCGIなどで作成された下のデータが必要です。

    (1)カウンタ数

    あなたが設置したアクセスカウンタCGIで記録された、カウンタファイル(サンプルでは、count)
    (2)再訪問回数
    あなたが別のスクリプトなどで作成した、再訪問回数が記録されてるクッキーデータのクッキー名(サンプルでは、tkiku_new)。クッキーの中に、tkiku_new=count:10,・・・ の形式で記録されてるものとして処理しています。countは再訪問回数を表し名前は固定です。数字の10は再訪問回数です。クッキーについては、クッキー入門を参考にして下さい。

  2. DNS逆引き用、Look Up Table
    こちらからipmas.dat (約33KB、12/27(Tue) 17:23版) をダウンロードして下さい(左クリックすると表示するか保存するか聞いてきますので「ファイルに保存」を選択するとdowncnt.cgi という名で保存されますので、ファイル名をipmas.datに変更して下さい)。DNS逆引きスクリプトは下のサンプルには組み込まれています。ipmas.datをセットするだけです。

    (注)DNS逆引きのみを適用したい方は、アクセス解析アクセス解析2の方ををご覧下さい。こちらのほうが解りやすいと思います。

  3. 再訪問回数を得るためのクッキー読み込みルーチン decode_cookie の追加
    下のサンプルには組み込まれています。スクリプトの最後のあたりにある sub decode_cookie がそうです。

  4. ブラウザの詳細情報の取得
    下のサンプルには組み込まれています。

下のスクリプトをマウスでドラッグして「コピー」し、エディタに「貼りつけ」るとコピーできます。
#!/usr/bin/perl #↑perlの存在するpathに書き換えてください。 # # (SSI式) WebACCESS v2.2 is Free. (c)rescue@ask.or.jp # modified by http://kikuchisan.net/ # スクリプトの利用規定等 # http://www.ask.or.jp/~rescue/support/ # バグやヴァージョンアップのお知らせ等 # http://www.ask.or.jp/~rescue/webboard/ #-------------------------------------------------------------------# # あなたの環境にあわせて変更するところ-------- # ログ記録ファイルとカウンター記録ファイルおよび# DNS逆引き用 # look up tableをフルパスで設定。 # 相対パスで指定するときは、SSI記述するHTMLから見た位置を指定 # $log = "./log.csv"; #ログ記録ファイル $cnt = "./count"; #カウンター記録ファイル(count) $ipmas = "./ipmas.dat"; #DNS逆引き用look up table $cookie_name = 'tkiku_new'; #クッキー名 # 集計に含めないURLを指定(この文字列を含むデータを記録しない) #$mine = "http://kikuchisan.net/"; # 最大ログ記録件数 $max = "1000"; # 変更するところ(ここまで)-------- #----- 訪問回数の取得-----------------------------------------------# &decode_cookie($cookie_name); #$COOKIE{'count'}に訪問回数がセット $vcount = $COOKIE{'count'}; #----- カウンター数の取得-------------------------------------------# open (CNT,"$cnt")||die"$cnt :$!"; $ncount = <CNT>; close(CNT); #----- 時刻取得-----------------------------------------------------# ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime(time + 9*3600); $month = ($mon + 1); if ($month < 10) { $month = "0$month"; } if ($mday < 10) { $mday = "0$mday"; } if ($hour < 10) { $hour = "0$hour"; } if ($min < 10) { $min = "0$min"; } #-------------------------------------------------------------------# # OS&ブラウザ名の取得 $HTTP_USER_AGENT = $ENV{'HTTP_USER_AGENT'}; $HTTP_USER_AGENT =~ s/</&lt;/g; $HTTP_USER_AGENT =~ s/>/&gt;/g; $HTTP_USER_AGENT =~ s/,//g; if ($HTTP_USER_AGENT =~ /NT 5.0/i) { $OS = "Windows2000"; } elsif ($HTTP_USER_AGENT =~ /NT 5.1/i) { $OS = "WindowsXP"; } elsif ($HTTP_USER_AGENT =~ /Win 9x/i) { $OS = "WindowsME"; } elsif ($HTTP_USER_AGENT =~ /Win(.*)(95|98|NT)/i) { $OS = $2; $OS =~ y/a-z/A-Z/; $OS = "Windows$OS"; } elsif ($HTTP_USER_AGENT =~ /Macintosh/i) { $OS = "Macintosh"; } elsif ($HTTP_USER_AGENT =~ /Mac_PowerPC/i) { $OS = "Mac_PowerPC"; } elsif ($HTTP_USER_AGENT =~ /X11/i) { $OS = "X11"; } elsif ($HTTP_USER_AGENT =~ /Linux/i) { $OS = "Linux"; } elsif ($HTTP_USER_AGENT =~ /SunOS/i) { $OS = "SunOS"; } elsif ($HTTP_USER_AGENT =~ /FreeBSD/i) { $OS = "FreeBSD"; } elsif ($HTTP_USER_AGENT =~ /WebTV/i) { $OS = "WebTV"; } elsif ($HTTP_USER_AGENT =~ /AIX/i) { $OS = "AIX"; } elsif ($HTTP_USER_AGENT =~ /OSF1/i) { $OS = "OSF1"; } elsif ($HTTP_USER_AGENT =~ /NEWS-OS/i) { $OS = "NEWS-OS"; } elsif ($HTTP_USER_AGENT =~ /IRIX/i) { $OS = "IRIX"; } elsif ($HTTP_USER_AGENT =~ /HP-UX/i) { $OS = "HP-UX"; } elsif ($HTTP_USER_AGENT =~ /BSD\/OS/i) { $OS = "BSD/OS"; } elsif ($HTTP_USER_AGENT =~ /DoCoMo/i) { $OS = "DoCoMo"; } elsif ($HTTP_USER_AGENT =~ /J-PHONE/i){ $OS = "J-sky"; } elsif ($HTTP_USER_AGENT =~ /UP\.Browser/i){ $OS = "EZweb"; } else {$OS = "Etc."; } ($hua,$vers) = split('/',$HTTP_USER_AGENT); if ($vers =~ /MSIE/) { ($hua,$vers) = split(/MSIE /,$vers); ($vers,$hua) = split(/\;/,$vers); $HTTP_USER_AGENT ="MSIE/$vers $OS"; } elsif ($hua eq "Mozilla") { ($vers,$hua) = split(/ \[/,$vers); ($vers,$hua) = split(/\(/,$vers); $HTTP_USER_AGENT ="Mozilla/$vers $OS"; } else { ($vers,$hua3) = split(/\(/,$HTTP_USER_AGENT); $HTTP_USER_AGENT ="$vers $OS"; } $hua = $HTTP_USER_AGENT; #-------------------------------------------------------------------# # リモートホスト名の判定 $rh = $ENV{'REMOTE_HOST'}; $addr = $ENV{'REMOTE_ADDR'}; #--DNS逆引き------ open(FP,"<$ipmas") || die "Can't open $ipmas\n"; $flg=0; while(<FP>){ ($id1,$name1)=split(/\s+/); if($rh =~ /$id1/){ $flg=1; $rh = $name1; last; } } close(FP); if($flg==0){ if ($rh eq $addr) { $rh = gethostbyaddr(pack('C4',split(/\./,$rh)),2) || $addr; } if ($rh =~ /(.*)\.(\d+)$/) { ; } elsif ($rh =~ /(.*)\.(.*)\.(.*)\.(.*)$/) { $rh = "\*\.$2\.$3\.$4"; } elsif ($rh =~ /(.*)\.(.*)\.(.*)$/) { $rh = "\*\.$2\.$3"; } } #--DNS逆引き(ここまで)----------------------------------------------# # リンク元の取得 $ref = $ENV{'HTTP_REFERER'}; #if ($ref =~ /$mine/i || $ref =~ /file:/) { $ref = ""; } #-------------------------------------------------------------------# if (!open(DB,"$log")) { &error(1); } @lines = <DB>; close(DB); $ic = 0; foreach $line (@lines) { $ic++; if ($ic == $max) { last; } push(@new,$line); } $value = "$hour\,$ref\,$rh\,$hua\,$year\/$month\/$mday\,$min\,$ncount\,$vcount\n"; unshift(@new,$value); if (!open(DB,">$log")) { &error(2); } print DB @new; close(DB); exit; #--クッキー読み込みルーチン-----------------------------------------# sub decode_cookie { local($cookie) = @_; local($name,$value,$cookies); foreach (split(/\;/,$ENV{'HTTP_COOKIE'})) { ($name, $value) = split(/=/); $name =~ s/ //g; $COOKIES{$name} = $value; } foreach (split(/\,/,$COOKIES{$cookie})) { ($name, $value) = split(/:/); $COOKIE{$name} = $value; } } #-------------------------------------------------------------------# sub error { print "ERROR $_[0]"; exit; }


 
 
©1997- Kikuchisan's workshop All rights reserved //

スポンサーリンク

関連コンテンツ