訪問者の分析                戻る

訪問される方の簡単な記録を残し,分析を試みた時に使用したプログラムです.
visit.cgiは記録用で,clr.cgiはHTMLとして表示し,Clearするプログラムです.なんとか動いたようです.同時にアクセスが在った時のためにフアイルのロックもかけてあります(かけたつもり?). また,20KByte以上にログフアイルがなった時は,フアイルを 0 にしてしまいます.
日時,REMOTE_ADDR,HTTP_USER_AGENT,ペ−ジの識別用の文字列 を記録いたしました.

私の場合は
REMOTE_ADDR : 210.175.206.37 ..ドメイン名が判るだけで個人は特定できません
HTTP_USER_AGENT : Mozilla/4.0(compatible;MSIE5.5;WindowsNT 5.0)などが記録されます

環境変数にセットされる,訪問されたかたの情報は REMOTE_ADDR,HTTP_USER_AGENT しかないようです.残念 ??


記録したいペ−ジに <IMG SRC="/cgi-bin/visit.cgi?識別用の文字列" WIDTH=1 HEIGHT=1> を入れ,記録 (注)/cgi-bin/couter/demo.dat, /cgi-bin/img/sp.gif  の2Fileが必要 表示用の SHTML FILE に <A HREF="/cgi-bin/clr.cgi">訪問者表示</A>  を入れ,記録を読み出す
訪問者の記録
#!/usr/bin/perl

#visit.cgi

#



$lock="./counter/lock.dat";

$agent=$ENV{'HTTP_USER_AGENT'};

$addr=$ENV{'REMOTE_ADDR'};

($sec, $min, $hour, $mday, $mon, $year,$wday,$yday,$isdat) = localtime(time);

$year += 1900;

$mon +=1;



$fn=$ENV{'QUERY_STRING'};

$fname="./counter/demo.dat";



&lock;

&count;

&unlock;



open(out,"./img/sp.gif") or exit(0);



print "Content-type: image/gif\n\n";



binmode out;

binmode STDOUT;

print while();

close(out);

exit(0);



#

#subroutine

#

sub count

{

 if( -e $fname)

  {

   ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks)=stat($fname);

   if($size>20000)

    {

     open (CNT,"+>$fname") or exit(0);

     close(CNT);

    }

   }



   open (CNT,">>$fname") or exit(0);

   $info="$mon/$mday $hour:$min,$addr,$agent,$fn\n";



   print CNT $info;

   close(CNT);

}

sub lock

{ $t=50000;

  while($t>0)

  {  $t--;

     if(not(-e "$lock"))

      { open(LK,">$lock") or exit(0);

        close(LK);

        $t=0;

      }

   }

}



sub unlock

{ unlink("$lock"); }



#--End



訪問者の表示
#!/usr/bin/perl # clr.cgi # $fname="./counter/demo.dat"; open (CNT,"+<$fname") or exit(0); print "Content-type: text/html\n\n"; print "<PRE>" print while(<CNT>); print "</PRE>"; close(CNT); open (CNT,"+>$fname") or exit(0); close(CNT); exit(0)