parse php, вычленить инфу из файла

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Гость
проходил мимо

parse php, вычленить инфу из файла

Непрочитанное сообщение Гость » 2010-08-16 10:15:23

есть такие логи:

Код: Выделить всё

2010-08-16 11:36:00: (request.c.304) fd: 7 request-len: 188
PROPFIND /cds/ HTTP/1.1
Host: mobile.test.su
User-Agent: BitKinex/3.1.1
Accept: */*
Pragma: no-cache
Cache-Control: no-cache
Depth: 1
Content-Length: 220
Content-Type: text/xml


2010-08-16 11:36:00: (response.c.128) Response-Header:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="DAV"
Content-Type: text/html
Content-Length: 351
Date: Mon, 16 Aug 2010 05:36:00 GMT
Server: lighttpd/1.4.26


2010-08-16 11:36:01: (request.c.304) fd: 8 request-len: 223
PROPFIND /cds/ HTTP/1.1
Host: mobile.test.su
User-Agent: BitKinex/3.1.1
Accept: */*
Pragma: no-cache
Cache-Control: no-cache
Depth: 1
Content-Length: 220
Content-Type: text/xml
Authorization: Basic bW9iaWxlOg==


2010-08-16 11:36:01: (http_auth.c.1046) password doesn't match for  /cds/ mobile , IP: 10.0.33.15
2010-08-16 11:36:01: (response.c.128) Response-Header:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="DAV"
Content-Type: text/html
Content-Length: 351
Date: Mon, 16 Aug 2010 05:36:01 GMT
Server: lighttpd/1.4.26
хочу попробовать распарсить их на пхп
в логах получается присутствуют блоки запросов клиента и блоки ответов сервера
из каждого блока надо вычленить необходимую инфу, например, в блоке запроса клиента инетересен запршаиваемый хост, юзер-агент и время. Все эти данные размещаются в разных строках
Как-то можно распарсить лог-файл или может можно по-другому сделать?
в дргугом примере до этого использовал preg_match, там файл можно было построчно парсить

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ADRE
майор
Сообщения: 2645
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: parse php, вычленить инфу из файла

Непрочитанное сообщение ADRE » 2010-08-18 18:53:03

тутже тоже можно построчно парсить и воспользоваться темже прегматьч
//del

freek
проходил мимо
Сообщения: 8
Зарегистрирован: 2009-07-04 20:49:51

Re: parse php, вычленить инфу из файла

Непрочитанное сообщение freek » 2010-08-21 10:00:29

вот так первый раз разнеси строку и будет тебе счастье

Код: Выделить всё

 explode("\n\n", $filecontent)

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: parse php, вычленить инфу из файла

Непрочитанное сообщение BlackCat » 2010-09-02 15:38:54

freek писал(а):вот так первый раз разнеси строку и будет тебе счастье

Код: Выделить всё

 explode("\n\n", $filecontent)
Вот это не самая лучшая идея: сначала придётся всё считать в память, а после этой функции занимаемый объём можно умножать на два.
Вариант ADRE минимизирует затраты памяти. А строки, по возможности, лучше разбирать stripos(): формат полей достаточно простой, а регулярки, как ни крути, работают медленнее на простом поиске.

frk
рядовой
Сообщения: 42
Зарегистрирован: 2010-04-05 9:18:55

Re: parse php, вычленить инфу из файла

Непрочитанное сообщение frk » 2010-09-02 15:58:50

Я сказал как проще, а не менее ресурсо затратнее :)

Аватара пользователя
BlackCat
прапорщик
Сообщения: 469
Зарегистрирован: 2007-10-16 22:40:42

Re: parse php, вычленить инфу из файла

Непрочитанное сообщение BlackCat » 2010-09-02 16:23:07

frk писал(а):Я сказал как проще, а не менее ресурсо затратнее :)
Аргументируйте, что вариант с explode() проще. Из минусов, сразу можно отметить распадение одного цикла (построчное чтение) на два (перебор отдельных записей и, всё равно, построчный разбор каждой). Второй цикл, конечно, можно заменить одним регулярным выражением, но для этого требуется неизменный порядок полей.
=====
Это просто горький опыт написания разборщика дампа БД на отдельные SQL-запросы.