【发布时间】:2016-02-25 08:55:11
【问题描述】:
所以我正在尝试解析具有以下格式的 TXT 文件。每个条目都在一行上。
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. 将整个文件解析成一个数组。 //完毕
2。拾取 1 145 之后的所有内容...(将在数组的 [3] 中结束)并进一步解析它,以便我有以下故障。
- 网址
- src=172.16.41.15:62490
- dst=144.76.76.148:80
- mac=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
我很难在主循环中为第二次解析找到正确的语法。我从索引 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
?>
【问题讨论】:
-
您可以添加您当前的结果吗?
-
嗨 - 目前没有显示任何内容。我认为第二次爆炸需要另一个循环才能通过?谢谢。
-
从
$row_data数组上方的示例数据中,其中有两个元素,因为只有一个更大的空白。所以$row_data1 = explode(' ', $row_data[3]);实际上应该是$row_data1 = explode(' ', $row_data[1]); -
嗨 Sam - 实际上样本数据没有正确粘贴。第 1、2、3 列数据后有大空格。之后的常规空格。谢谢。
-
@SKro,你可以使用PHP的
file
标签: php arrays file parsing text