![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| eaa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.9.2009 Репутация: нет Всего: нет |
Вот программа:
#!/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 (<LOG>) { 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 = "<B><FONT COLOR=red>$name:</FONT> $from</B>"; $old_from = "<A HREF=\"$old_from\">[Q] </A>"; $from = $old_from . $from; $found=1; } } print <<"END"; <HTML> <HEAD><TITLE>Access Analysis</TITLE> <STYLE> TH { font-size: x-small; } TD { font-size: x-small; } A { text-decoration: none; } </STYLE> </HEAD> <BODY BGCOLOR="#ffffff"> END if ($lineerrors > 0) { print <<"END"; $lineerrors lines were ignored. Are you sure your log file is in the Extended Log Format?<br> An ELF entry looks like this example:<br> <TT><NOBR>host.domain.com - - [10/Jul/1999:12:34:56 -0500] "GET / HTTP/1.1" 200 2376 "http://referer.com" "Browser Name"</NOBR></TT> <BR><BR> The following lines were ignored:<br> <tt> END foreach (@badlines) { print "<NOBR>$_</NOBR><br>"; } print "</tt><br>"; } print <<"END"; <TABLE BORDER=1 CELLPADDING=1 CELLSPACING=0> END foreach $site (sort {$first{$b} <=> $first{$a}} keys %sessions) { print <<"END"; <TR> <TD COLSPAN=4 BGCOLOR="#cccccc" ALIGN=LEFT> <B>$site</B> - $agent{$site} </TD> </TR> <TR> <TH>Date</TH> <TH>Page</TH> <TH>Status</TH> <TH>Referer</TH> </TR> END foreach (@{$sessions{$site}}) { ($date,$page,$status,$bytes,$from) = split(/\|/,$_); # Search keywords $found=0; if ($from =~ /\?/) { # Query results? &search_words("Excite","excite.com","search"); # &search_words("","",""); # &search_words("","",""); unless ($found) { if ($from =~ /^http/) { $from = "<A HREF=\"$from\">$from</A>"; } } } elsif ($from =~ /^http/) { $from = "<A HREF=\"$from\">$from</A>"; } # Modify based on content-type if ($page =~ /\.zip$/) { $page = "<B>" . $page . "</B>"; } if ($page =~ /\.jpg$/) { $page = "<font color=green>" . $page ."</font>"; } if ( ($status !~ /^2/) && ($status !~ /^304/) ) { $status = "<font color=red>$status</font>"; } print <<"END"; <TR> <TD>$date</TD> <TD>$page</TD> <TD>$status</TD> <TD>$from</TD> </TR> END } } print "</TABLE>\n\n"; При помощи программы можно получать следующую информацию о сайте: кол-во посетителей, какие именно странички каждый из посетителей смотрел, дату и время посещения, какие ссылки нажимал, какие слова набирал в сисиетме поиска для того чтобы найти сайт и по какой ссылке он попал на сайт. Подскажите, пожалуйста, что означают строчки: 1) /^(\S+)\s*(\S+)\s*(\S+)\s*\[([^\]]+)]\s*\"([^\"]+)"\s*(\S+)\s*(\S+)\s*\"\s*([^\"]*)\s*\"\s*\"\s*([^\"]*)\s*\"\s*$/o) 2)($page =~ /\.gif/) в строке next if ($page =~ /\.gif/); 3)$from =~ s|$local||; 4)$old_from = $from; if (($from =~ /$url/i) && ($from =~ /[\?\&]$string\=/)) { $from =~ s|.*[\?\&]$string=([^\&]*).*|$1|; $from =~ s|\+| |g; $from =~ s/%(..)/pack("c",hex($1))/ge; $from = "<B><FONT COLOR=red>$name:</FONT> $from</B>"; $old_from = "<A HREF=\"$old_from\">[Q] </A>"; $from = $old_from . $from; $found=1; 5)А здесь что происходит вообще непонятно: <HTML> <HEAD><TITLE>Access Analysis</TITLE> <STYLE> TH { font-size: x-small; } TD { font-size: x-small; } A { text-decoration: none; } </STYLE> </HEAD> <BODY BGCOLOR="#ffffff"> END if ($lineerrors > 0) { print <<"END"; $lineerrors lines were ignored. Are you sure your log file is in the Extended Log Format?<br> An ELF entry looks like this example:<br> <TT><NOBR>host.domain.com - - [10/Jul/1999:12:34:56 -0500] "GET / HTTP/1.1" 200 2376 "http://referer.com" "Browser Name"</NOBR></TT> <BR><BR> The following lines were ignored:<br> <tt> END foreach (@badlines) { print "<NOBR>$_</NOBR><br>"; } print "</tt><br>"; } print <<"END"; <TABLE BORDER=1 CELLPADDING=1 CELLSPACING=0> END foreach $site (sort {$first{$b} <=> $first{$a}} keys %sessions) { print <<"END"; <TR> <TD COLSPAN=4 BGCOLOR="#cccccc" ALIGN=LEFT> <B>$site</B> - $agent{$site} </TD> </TR> <TR> <TH>Date</TH> <TH>Page</TH> <TH>Status</TH> <TH>Referer</TH> </TR> END |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
eaa,
1) регулярное выражение 2) регулярное выражение в условии 3) опять регулярное выражение 4) регулярное выражение в основном 5) вывод html-разметки, причем даже для уровня начинающего довольно кудряво и не красиво. встречный вопрос, насколько хорошо знаком с перл?? -------------------- менеджер по кодеврайтингу |
|||
|
||||
| eaa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.9.2009 Репутация: нет Всего: нет |
Мы с Perl знакомы всего 1 неделю
А можно поподробнее? |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: нет Всего: 162 |
eaa, используйте кнопку "Код" для форматирования кода и используйте названия тем, которые отображают её суть.
|
|||
|
||||
| eaa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.9.2009 Репутация: нет Всего: нет |
Кто-нибудь может объяснить что значит строчка
$from =~ s/%(..)/pack("c",hex($1))/ge; Добавлено через 12 минут и 39 секунд И еще вот это, вообще не понятно что такое((((((((((( $from = "<B><FONT COLOR=red>$name:</FONT> $from</B>"; $old_from = "<A HREF=\"$old_from\">[Q] </A>"; |
|||
|
||||
| KSURi |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 887 Регистрация: 8.6.2006 Где: Russia Репутация: 2 Всего: 27 |
Мимо кассы)
Первое - perldoc perlre. Второе - не понятно, что вам не понятно. -------------------- Died at Life.pl line 21 |
|||
|
||||
| eaa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.9.2009 Репутация: нет Всего: нет |
Что такое FONT COLOR и A HREF?
|
|||
|
||||
| OutlawZ |
|
||||||
|
Опытный ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 269 Регистрация: 19.10.2007 Репутация: нет Всего: нет |
Девушка это теги html, FONT COLOR задает цвет текста внутри данного тега, а A HREF это ссылка ,
А строчка:
Это регулярное выражения, задает поиск чего то там или ищет совпадения по шаблону хз чего, я правда код не смотрел честно в падлу . Хы-хы что бы понять что такое теги и для чего они вообще, наберите в гогле "html теги" и полное описание тегов откроется для тебя!
Тут задается CSS стиль для тегов, как показано по параметрам это размер для TH и TD , а для ссылка написано что без всяких подчеркиваний и т.д Это сообщение отредактировал(а) OutlawZ - 12.10.2009, 21:05 -------------------- ![]() ![]() |
||||||
|
|||||||
| eaa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.9.2009 Репутация: нет Всего: нет |
Спасибо.
За "мужика" обидно, потому что я девушка |
|||
|
||||
| krypt3r |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: нет Всего: 16 |
Это преобразование строки типа %30%31%32%33%34%35%36%37%38%39 в нормальный вид - 0123456789 (urldecode). |
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
мне кажется, что не только с перл, а вообще с программированием только недавно познакомилась?? тогда лучше начать с чтения учебников и с более простых примеров типа "Hello World!" ;) -------------------- менеджер по кодеврайтингу |
|||
|
||||
| krypt3r |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 359 Регистрация: 9.6.2009 Репутация: нет Всего: 16 |
Скорее всего, следует начать с изучения HTML =)
|
|||
|
||||
| Bulat |
|
|||
![]() татарский Нео ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1701 Регистрация: 22.3.2006 Где: Альметьевск Репутация: нет Всего: 57 |
HTML - не язык программирования, собс-но лично я его даже не изучал, само пришло... А вот перл почитать, поразбираться пришлось.. -------------------- менеджер по кодеврайтингу |
|||
|
||||
| eaa |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 16.9.2009 Репутация: нет Всего: нет |
Народ, спасибо за советы
Я читаю, читаю. |
|||
|
||||
![]()
|
| Правила форума "Perl: CGI программирование" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: разработка для Web | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |