Так что я пытаюсь проанализировать TXT-файл, который имеет следующий формат. Каждая запись находится в одной строке.Комплексный синтаксический анализ текстового файла в PHP
sample.txt
2016-02-24 13:54:23 Local0.Info 172.16.120.4 1 1456311263.500015263 ASD_MX600 urls src=172.16.41.15:62490 dst=144.76.76.148:80 mac=00:1B:0D:63:84:00 user=CN=Smith\John,OU=S-HS,OU=SAcc,DC=abc,DC=org,DC=ab agent='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 seb/2.0 SEBKEY' request: GET http://something.com/theme/image.php/clean/page/1455532301/icon
2016-02-24 13:54:23 Local0.Info 172.16.120.4 1 1456311263.500097075 ASD_MX600 urls src=172.16.41.15:62485 dst=144.76.76.148:80 mac=00:1B:0D:63:84:00 user=CN=Smith\John,OU=S-HS,OU=SAcc,DC=abc,DC=org,DC=ab agent='Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 seb/2.0 SEBKEY' request: GET http://somethingelse.com/theme/image.php/clean/core/1455532301/f/pdf-24
мне нужно сделать следующее:
1. Разбираем весь файл в массив. // DONE
2. Подберите все после 1 145 ... (что будет в [3] массива) и проанализируйте его дальше, чтобы у меня были следующие разбивки.
- URLs
- SRC = 172.16.41.15: 62490
- ДСТ = 144.76.76.148: 80
- макинтош = 00: 1B: 0D: 63: 84: 00
- пользователь = CN = Smith \ John , OU = S-HS, OU = SAcc, DC = abc, DC = org, DC = ab
- agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv: 36.0) Gecko/20100101 seb/2.0 SEBKEY'
- запрос: GET
- http://something.com/theme/image.php/clean/page/1455532301/icon
Я имею трудное время получить правильный синтаксис для 2-го разбора в основном цикле. Я получаю весь гигантский раздел из индекса 3 [3], и я думаю, что я также использую метод explode(), чтобы отрубить его на основе «», но потом я потерялся. Как я могу получить данные, как показано выше? Прогресс Мой код до сих пор:
<?php
$txt_file = file_get_contents('C:\sample.txt');
$rows = explode("\n", $txt_file);
array_shift($rows);
foreach($rows as $row => $data)
{
//get row data
$row_data = explode(' ', $data); //chop each row first based on bigger space
//--------------------------
$info[$row]['timestamp'] = $row_data[0];
// $info[$row]['localinfo'] = $row_data[1];
$info[$row]['ip'] = $row_data[2];
$info[$row]['other'] = $row_data[3]; //This is where LONGEST string exists
//--------------------------
$row_data1 = explode(' ', $row_data[3]); //chop index item based on smaller space
$rowd_data2[$row_data1]['urlsflows'] = $row_data1[3];
//display data
// echo 'Row ' . $row . ' TIMESTAMP: ' . $info[$row]['timestamp'] . '<br />';
// echo 'Row ' . $row . ' LOCALINFO: ' . $info[$row]['localinfo'] . '<br />';
// echo 'Row ' . $row . ' IP: ' . $info[$row]['ip'] . '<br />';
//--The line below is where I am lost. Kindly help.
echo $rowd_data2[$row_data1]['urlsflows'];
} //end of for loop
?>
Не могли бы вы добавить свой текущий результат? – Sakuto
Hi - В настоящее время ничего не отображается. Я думаю, что 2-му взрыву нужен еще один цикл? Благодарю. –
Из ваших данных примера над вашим массивом '$ row_data' будет два элемента в нем, так как есть только один большой пробел. Итак, '$ row_data1 = explode ('', $ row_data [3]);' на самом деле должно быть '$ row_data1 = explode ('', $ row_data [1]);' –