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

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

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

Студворк — интернет-сервис помощи студентам
Здравствуйте! Недавно решил посвящать свое свободное время веб программированию. Увлеченно учу 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
03.05.2012, 18:25
Ответы с готовыми решениями:

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

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

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

8
03.05.2012, 19:09

Не по теме:

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

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

Не по теме:

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

Сделано.
Вложения
Тип файла: zip wslog.zip (22.3 Кб, 41 просмотров)
0
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
05.05.2012, 10:59  [ТС]
Так, кое-что получилось сделать.
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
 Аватар для shafl
258 / 147 / 37
Регистрация: 24.01.2011
Сообщений: 427
05.05.2012, 11:20
считывайте всё в массив построчно с помощью file() и работайте с массивом.
0
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
05.05.2012, 12:15  [ТС]
Сделал так:
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
 Аватар для shafl
258 / 147 / 37
Регистрация: 24.01.2011
Сообщений: 427
05.05.2012, 12:28
я бы рекомендовал регулярными выражениями парсить
0
1 / 1 / 1
Регистрация: 04.03.2012
Сообщений: 101
05.05.2012, 14:37  [ТС]
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  [ТС]
Разобрался со всем, кроме:

когда за забросом идет пустой заброс, этот запрос почему-то считается предыдущим запросом. На примере:
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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.05.2012, 19:25
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 31.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru