Программирование > Perl

Помощь за вознаграждение

(1/2) > >>

eaa:
При помощи программы можно получать следующую информацию о сайте: кол-во посетителей, какие именно странички каждый посетитель смотрел, дату и время посещения, какие ссылки нажимал, какие слова набирал в системе поиска для того чтобы найти сайт и по какой ссылке он попал на сайт.
и если я не ошибаюсь - эта прога работает верно исключительно под локальным сервером)
а как это исправить?

Вот сама программа:
#!/usr/bin/perl
#
# Matt Kruse
# http://mkruse.netexpress.net/
#
print "Content-type: text/html\\n\\n";

$tail = $ENV{\'QUERY_STRING\'};
$tail = $tail || 250;

# Location of the log file in Extended Log Format
$log = "/etc/httpd/logs/mkruse-access_log";

# Local domain name to cut out of referer info
$local = "http://mkruse.netexpress.net";

# -------------------------

%MONTHS=(
  \'Jan\',\'01\',\'Feb\',\'02\',\'Mar\',\'03\',\'Apr\',\'04\',\'May\',\'05\',\'Jun\',\'06\',
  \'Jul\',\'07\',\'Aug\',\'08\',\'Sep\',\'09\',\'Oct\',\'10\',\'Nov\',\'11\',\'Dec\',\'12\'
  );

sub ReadLog {
  $LOG=shift;
  open (LOG,"tail -$tail $LOG |") || print "ERROR: Couldn\'t open the log file: $LOG";

  $lineerrors=0;
LOGLOOP:  while () {
    unless
    (($site,$rfc931,$user,$when,$request,$status,$bytes,$from,$agent)=
    /^(\\S+)\\s*(\\S+)\\s*(\\S+)\\s*\\[([^\\]]+)]\\s*\\"([^\\"]+)"\\s*(\\S+)\\s*(\\S+)\\s*\\"\\s*([^\\"]*)\\s*\\"\\s*\\"\\s*([^\\"]*)\\s*\\"\\s*$/o)
   {
   $lineerrors++;
   push (@badlines,$_);
   next;
   }
    ($page) = ($request =~ m|[^\\/]*(\\S*)|);

    next if ($page =~ /\\.gif/); # skip the gifs
    $site="\\L$site";

    # get all the time info
    ($date,$month,$year,$hour,$min,$sec) = ($when =~ m|(..)/(...)/..(..):(..):(..):(..)|o);
    $month = $MONTHS{$month};

    $datestamp = $year . $month . $date . $hour . $min;
    unless ($first{$site}) { $first{$site} = $datestamp; }

    $datestring = "${month}/${date}\\ \\;${hour}:${min}";

    $from =~ s|$local||;

    # Record the browser info
    $agent{$site} = $agent;

    # Update the array for site
    $line = join("|",$datestring,$page,$status,$bytes,$from);
    push(@{$sessions{$site}},$line);
    }

  close(LOG);
  }

&ReadLog($log);

sub search_words {
   return if ($found);
   my($name) = shift;
   my($url) = shift;
   my($string) = shift;

   $old_from = $from;
   if (($from =~ /$url/i) && ($from =~ /[\\?\\&]$string\\=/)) {
      $from =~ s|.*[\\?\\&]$string=([^\\&]*).*|$1|;
      $from =~ s|\\+| |g;
      $from =~ s/%(..)/pack("c",hex($1))/ge;
      $from = "$name: $from";
      $old_from = "[Q] ";
      $from = $old_from . $from;
      $found=1;
      }
   }

print

arto:
смените имя лога-файла

eaa:
Что значит смените? Не из головы же его брать?

arto:
из конфигурационных файлов вашей системы.

eaa:
А это как?

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 
Перейти к полной версии