Страница 1 из 1

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, там файл можно было построчно парсить

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

Добавлено: 2010-08-18 18:53:03
ADRE
тутже тоже можно построчно парсить и воспользоваться темже прегматьч

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

Добавлено: 2010-08-21 10:00:29
freek
вот так первый раз разнеси строку и будет тебе счастье

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

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

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

Добавлено: 2010-09-02 15:38:54
BlackCat
freek писал(а):вот так первый раз разнеси строку и будет тебе счастье

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

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

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

Добавлено: 2010-09-02 15:58:50
frk
Я сказал как проще, а не менее ресурсо затратнее :)

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

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

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

Добавлено: 2010-09-02 16:38:57
frk
Промолчу :)