Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/19: Рейтинг темы: голосов - 19, средняя оценка - 4.68
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
1

анализ лог файла

03.05.2012, 18:25. Показов 3518. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Недавно решил посвящать свое свободное время веб программированию. Увлеченно учу html css javascript. Пару дней назад начал изучение php. Через некоторое время нужно сдавать лабораторную работу по обработке лог файла. Слышал что на php это решается легче всего. Буду рад, если кто-нибудь откликнется, от себя обязуюсь что не заброшу изучение сего языка.
Суть:
Написать программу по разбивке и анализу содержимого файла отчета работы ПО (log-файла).
Необходимо проанализаровать и подсчитать запросы, а также вывести их в алфавитном порядке с подсчетом количества повторений.
Программа должна выдавать отчет о своей работе в виде:

Дата Запросы
25.04.2002 - 12
26.04.2002 - 10
27.04.2002 - 5
...

Всего было сделано (запросов) - 1679

Сортировка запросов:

Бухгалтерский учет - 25
Бухгалтерский журнал - 30
Экономика Томска - 6
Экономика Якутии - 1
...

Пример файла отчета работы программы wslog.txt
Сортировку запросов необходимо проводить по CGI-переменным
S21STR=
S21ALL=

Вставил кусок лог файла, в оригинале он намного больше (400кб)
Вложения
Тип файла: txt log.txt (5.1 Кб, 38 просмотров)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.05.2012, 18:25
Ответы с готовыми решениями:

Постоянный парсинг лог-файла
Приветствую. На хостинге автоматом создается лог в текстовом файле с данными по запросу страниц и...

Анализ лог файла apache
Мужики помогите плиз Написать программу анализирующую лог файл сервера apache, рассчитывающую...

Анализ лог-файла маршрутизатора
Написать программу анализирующую лог файл маршрутизатора, отображающую IP адреса, с которых...

Провести анализ лог-файла tcpdump с помощью scapy
Доброго дня. Прошу помощи. После перехвата трафика с помощью tcpdump я его записываю в...

8
shafl
03.05.2012, 19:09
  #2

Не по теме:

приложите весь лог, прошу в личных целях :)

0
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
03.05.2012, 19:51  [ТС] 3
Цитата Сообщение от shafl Посмотреть сообщение

Не по теме:

приложите весь лог, прошу в личных целях :)

Сделано.
Вложения
Тип файла: zip wslog.zip (22.3 Кб, 41 просмотров)
0
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
05.05.2012, 10:59  [ТС] 4
Так, кое-что получилось сделать.
PHP
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
<html>
<head>
<title>lab work 2</title>
</head>
<body>
 
<?php
 
$read = fopen("log.txt", "r");
if ($read) 
{
while (!feof($read))
{
$mytext = fgets($read, 999);
$date = substr($mytext, 0, 10);
echo $date.'<br>';
$i++;
}
echo "Количество запросов:$i";
}
else echo "Ошибка при открытии файла";
fclose($read);
 
?>
 
</body>
</html>
Пока подсчитал общее количество запросов и просто вывел даты этих запросов. Нужно: для каждой даты вывести количество запросов. Пока не могут придумать как сделать. Прошу помощи.

Добавлено через 23 минуты
Появилась небольшая идея, но как реализовать не пойму что-то. Записать все даты в отдельный файл как обычную строку через пробел каждую дату, потом подсчитать количество одинаковых дат и вывести.

25.02.2002 25.02.2002 25.02.2002 26.02.2002 26.02.2002 26.02.2002 26.02.2002 26.02.2002

25.02.2002 - 3
26.02.2002 - 5
0
258 / 147 / 37
Регистрация: 24.01.2011
Сообщений: 427
05.05.2012, 11:20 5
считывайте всё в массив построчно с помощью file() и работайте с массивом.
0
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
05.05.2012, 12:15  [ТС] 6
Сделал так:
PHP
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
<html>
<head>
<title>lab work 2</title>
</head>
<body>
 
<?php
 
$read = fopen("log.txt", "r");
$write=fopen("date.txt","w");
if ($read) 
{
while (!feof($read))
{
$mytext = fgets($read, 2000);
$date = substr($mytext, 0, 10);
fwrite($write," $date");
$i++;
}
echo "Всего запросов:$i<br>";
}
else echo "Ошибка при открытии файла";
 
fclose($write);
fclose($read);
 
$write=fopen("date.txt","r");
 
while(!feof($write))
{
$datetext=fgets($write, 2000);
}
$dates= explode(" ",$datetext);
unset($dates[0]);
foreach($dates as $val)
$pos[$val] = @substr_count($datetext, $val);
foreach($pos as $key => $cal)
echo "$key - запросов: $cal<br>";
 
fclose($write);
 
?>
 
</body>
</html>
Все работает.

Добавлено через 4 минуты
Теперь самое трудное-сортировка запросов. Можно ли использовать функцию parse_str? Я посмотрел, вроде подходит, так как у нас перед названием стоит &002S21STR.
0
258 / 147 / 37
Регистрация: 24.01.2011
Сообщений: 427
05.05.2012, 12:28 7
я бы рекомендовал регулярными выражениями парсить
0
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
05.05.2012, 14:37  [ТС] 8
1 проблема: выдает ошибку Undefined variable: kind в 47 строке, появилась внезапно, после перезагрузки сервера (wampserver), до этого не было.

2 проблема: косячит с подсчетом Бухгалтерского учета (пишет больше чем есть на самом деле)

3 проблема: почемуто не удаляет первый символ при сортировке с помощью unset , хотя с датами все нормально удалялось.

PHP
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<html>
<head>
<title>lab work 2</title>
</head>
<body>
 
<?php
$i=0;
$read = fopen("log.txt", "r"); //изначальный лог-файл
$write=fopen("date.txt","w"); //файл с датами
$rewrite=fopen("log2.txt","w"); //лог-файл с измененными &002S21STR и &S21ALL на &kind
if ($read) 
{
while (!feof($read))
{
$mytext = fgets($read, 2000);
$mytext=str_replace("&002S21STR","&kind",$mytext); //заменяем &002S21STR на &kind
$mytext=str_replace("&S21ALL","&kind",$mytext);//заменяем &S21ALL на &kind
fwrite($rewrite,"$mytext"); //записываем в log2.txt измененный лог-файл
$date = substr($mytext, 0, 10); //отсеиваем даты
fwrite($write," $date"); //записываем даты в date.txt
$i++;
}
echo "Всего запросов:$i<br>";
}
else echo "Ошибка при открытии файла";
fclose($write);
fclose($read);
fclose($rewrite);
 
$write=fopen("date.txt","r");
$datetext=fgets($write, 2000); //копируем содержимое date.txt в строку
$dates= explode(" ",$datetext); //разбиваем на части массива по пробелу
unset($dates[0]); //удаляем первый пробел
foreach($dates as $val)
$pos[$val] = @substr_count($datetext, $val);
foreach($pos as $key => $cal)
echo "$key - запросов: $cal<br>";
fclose($write);
 
$rewrite=fopen("log2.txt","r");
$sort=fopen("sort.txt","w");
while (!feof($rewrite))
{
$mytext2 = fgets($rewrite, 2000); //читаем строку
parse_str($mytext2);
fwrite($sort,"/$kind"); //записываем все что после &kind= в файл sort.txt
}
fclose($rewrite);
fclose($sort);
 
$sort=fopen("sort.txt","r");
$kindtext=fgets($sort,2000); //копируем содержимое sort.txt в строку
$kinds= explode("/",$kindtext); //разбиваем на части массива по занку слэша
unset($kinds[0]); //удаляем первый слэш
foreach($kinds as $val)
$pos2[$val] = @substr_count($kindtext, $val);
foreach($pos2 as $key => $cal2)
echo "$key - запросов: $cal2<br>";
fclose($sort);
 
?>
 
</body>
</html>

Содержимое лог-файла:
MySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
25.02.2002^22:58.27^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^C21COM=Enter&I21DBN=MILS_FREE
25.02.2002^22:58.34^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21CNR=20&S21FMT=briefw&T21VAL=002&002S21P02=1&002S21P03=K=&002S21P05=Ключевые слова&002S21STR=Бухгалтерский учет&002S21P04=&002S21L0G=0&002S21P01=3&033S21P02=1&033S21P03=A=&033S21P05=Автор&033S21P06=1&033S21STR=&006S21P01=2&006S21P03=V=&006S21P05=Вид документа&006S21STR=&004S21P01=1&004S21P03=B=&004S21P05=ISSN/ISBN&004S21STR=&005S21P03=G=&005S21P05=Год издания&005S21STR=&C21COM=Поиск
25.02.2002^22:59.14^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21CNR=20&S21FMT=briefw&T21VAL=002&002S21P02=1&002S21P03=K=&002S21P05=Ключевые слова&002S21STR=Бухгалтерский учет&002S21P04=&002S21L0G=0&002S21P01=3&033S21P02=1&033S21P03=A=&033S21P05=Автор&033S21P06=1&033S21STR=&006S21P01=2&006S21P03=V=&006S21P05=Вид документа&006S21STR=&004S21P01=1&004S21P03=B=&004S21P05=ISSN/ISBN&004S21STR=&005S21P03=G=&005S21P05=Год издания&005S21STR=&C21COM=Поиск
25.02.2002^22:59.17^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^I21DBN=MILS_FREE&C21COM=Show&N21STN=1&N21FMT=fullw_&001N21NUM=40
25.02.2002^22:59.24^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^I21DBN=MILS_FREE&C21COM=Show&N21STN=1&N21FMT=fullw_&001N21NUM=40
25.02.2002^23:00.08^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&002S21P04=&002S21P01=3&006S21P01=2&002S21L0G=1&006S21P03=V=&006S21P05=Вид документа&002S21P02=1&002S21P03=K=&002S21P05=Ключевые слова&002S21STR=Бухгалтерский учет&C21COM=Поиск
25.02.2002^23:00.24^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&S21ALL=(K=бухгалтерск$)*(K=учет$)&S21UND=бухгалтерск|учет&S21STN=21&C21COM=Далее
25.02.2002^23:01.15^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&S21ALL=(K=бухгалтерск$)*(K=учет$)&S21UND=бухгалтерск|учет&S21STN=41&C21COM=Далее
25.02.2002^23:01.32^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&S21ALL=(K=бухгалтерск$)*(K=учет$)&S21UND=бухгалтерск|учет&S21STN=61&C21COM=Далее
26.02.2002^23:01.36^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&S21ALL=(K=бухгалтерск$)*(K=учет$)&S21UND=бухгалтерск|учет&S21STN=81&C21COM=Далее
26.02.2002^23:01.39^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&S21ALL=(K=бухгалтерск$)*(K=учет$)&S21UND=бухгалтерск|учет&S21STN=101&C21COM=Далее
26.02.2002^23:01.43^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&S21ALL=(K=бухгалтерск$)*(K=учет$)&S21UND=бухгалтерск|учет&S21STN=121&C21COM=Далее
27.02.2002^23:01.45^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&S21ALL=(K=бухгалтерск$)*(K=учет$)&S21UND=бухгалтерск|учет&S21STN=141&C21COM=Далее
27.02.2002^23:02.01^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&S21ALL=(K=бухгалтерск$)*(K=учет$)&S21UND=бухгалтерск|учет&S21STN=161&C21COM=Далее
Миниатюры
анализ лог файла  
0
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
05.05.2012, 19:25  [ТС] 9
Разобрался со всем, кроме:

когда за забросом идет пустой заброс, этот запрос почему-то считается предыдущим запросом. На примере:
MySQL
1
2
3
4
5
6
25.02.2002^22:58.34^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21CNR=20&S21FMT=briefw&T21VAL=002&002S21P02=1&002S21P03=K=&002S21P05=Ключевые слова&002S21STR=Бухгалтерскийучет&002S21P04=&002S21L0G=0&002S21P01=3&033S21P02=1&033S21P03=A=&033S21P05=Автор&033S21P06=1&033S21STR=&006S21P01=2&006S21P03=V=&006S21P05=Вид документа&006S21STR=&004S21P01=1&004S21P03=B=&004S21P05=ISSN/ISBN&004S21STR=&005S21P03=G=&005S21P05=Год издания&005S21STR=&C21COM=Поиск
25.02.2002^23:00.24^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&S21ALL=(K=бухгалтерск$)*(K=учет$)&S21UND=бухгалтерск|учет&S21STN=21&C21COM=Далее
25.02.2002^23:00.08^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&002S21P04=&002S21P01=3&006S21P01=2&002S21L0G=1&006S21P03=V=&006S21P05=Вид документа&002S21P02=1&002S21P03=K=&002S21P05=Ключевые слова&002S21STR=Бухгалтерскийучет&C21COM=Поиск
25.02.2002^23:01.32^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&S21ALL=(K=бухгалтерск$)*(K=учет$)&S21UND=бухгалтерск|учет&S21STN=61&C21COM=Далее
25.02.2002^22:58.27^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^C21COM=Enter&I21DBN=MILS_FREE
25.02.2002^23:01.15^Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)^&I21DBN=MILS_FREE&S21FMT=fullw&S21CNR=20&S21ALL=(K=бухгалтерск$)*(K=учет$)&S21UND=бухгалтерск|учет&S21STN=41&C21COM=Далее
первые 4 запроса обработаются как надо, а 5 посчитается за (K=бухгалтерск$)*(K=учет$). Не могу понять в чем дело.

Вот кусок кода, отвечающий за это:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
while (!feof($rewrite))
{
$mytext2=fgets($rewrite, 2000); //читаем строку
parse_str($mytext2);
if($kind)
{
fwrite($sort,"/$kind");
}//записываем все что после &kind= в файл sort.txt
else $s++;
 
}
echo "пустых запросов:$s<br>";
0
05.05.2012, 19:25
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.05.2012, 19:25
Помогаю со студенческими работами здесь

Анализ лог файлов
Добрый день. Необходимо загнать информацию из лог файла в ListView. Но я пока полностью не...

Анализ лог файлов на C#
Добрый день. Задание такое: необходимо написать программу, анализирующую лог файл сервера apache...

Запись лог файла
Доброго времени суток, есть программа которая сниферит сетевую карту. события приходят в виде ...

Ошибки лог-файла
Кто-нибудь знает что за ошибки в лог-файле? 1. File does not exist:...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru