#!/usr/local/bin/perl

# Detta program loggar en webbsidas besökare genom att en en bild på 
# sidan i själva verket är detta CGI-program som dels loggar besöket,
# dels serverar bilden. Nackdelen är att bara besökare som ser bilden
# loggas. Besökare med textbaserade webbläsare eller med bildinladdning 
# avslagen loggas inte, inte heller besökare som avbryter inladdningen 
# innan bilden laddats klart. En annan nackdel är att man inte kan logga 
# HTTP_REFERER (sidan med den länk hit som besökaren följde). Har du
# tillgång till serverns egna loggfiler är det bättre att grep:a ut de 
# rader som rör dina sidor från dem.
# Detta program skriver en loggfil enligt formatet "NCSA Combined" som 
# kan analyseras av flera olika analysprogram.
# Av Anders Hultman 1996. Förbättrad 1998.
# Distribueras under GNU General Public Licence

# Först beordrar programmet servern att skicka bildfilen.
# Ändra adressen så den passar dig. Observera att adressen är en 
# relativ URL som ska börja med /
print "Location: /~anders/bluedot.gif\n\n";

# Ange sedan den relativa URL:en till den sida som loggas. Om du
# vill logga besökarna på flera olika sidor kan du installera flera 
# olika kopior av detta program under olika namn, och med olika 
# värden på variablen $request
# En annan variant är om man vill använda samma program till att 
# logga besök på flera sidor haka på ett snedstreck och ett 
# unikt namn för varje sida efter adressen till programmet och
# sätta $request = $ENV{'PATH_INFO'};
$request = "/~anders/";

# Här öppnas loggfilen och en rad skrivs till.
# Ändra loggfilens namn till något som passar dig
# Om din egen dator har ett fast IP-nummer och du inte vill logga egna 
# besök kan du villkora denna del med en if-sats i stil med 
# if ($ENV{'REMOTE_ADDR'} ne '127.0.0.1')
{
  open (LOG, ">>../log.txt"); 

  print LOG $ENV{'REMOTE_HOST'};
  if ($ENV{'REMOTE_HOST'} eq "") { print LOG $ENV{'REMOTE_ADDR'}; }
  print LOG " ";

  print LOG $ENV{'REMOTE_IDENT'};
  if ($ENV{'REMOTE_IDENT'} eq "") { print LOG "-"; }
  print LOG " ";

  print LOG $ENV{'REMOTE_USER'};
  if ($ENV{'REMOTE_USER'} eq "") { print LOG "-"; }
  print LOG " ";

  $date = `/bin/date`;
  chop($date);
  @time = split (/ /,$date);
  print LOG "[$time[2]/$time[1]/$time[5]:$time[3] +0100] ";

  print LOG '"',$ENV{'REQUEST_METHOD'}," ";
  print LOG $request;
  print LOG " $ENV{'SERVER_PROTOCOL'}",'" ';

  print LOG "200 - ";

  print LOG '"',$ENV{'HTTP_REFERER'},'" ';
  print LOG '"',$ENV{'HTTP_USER_AGENT'},'"';

  print LOG "\n";
  close (LOG);
}

exit (0);

