2014-11-04 90 views
1

如何解析文本文件以提取包括日期在內的數據並將其加載到我的數據庫表中data_table如何解析日誌文件並將數據加載到數據庫中

這是我的文本文檔log.txt

127.0.0.1 1.255.255.255 - - [30/Sep/2014:23:58:33 +0200] GET http://www.google.com HTTP/1.1 200 u:123456789 ourl:http://google.com/image ac:text ssl:1 
127.0.0.1 1.255.255.255 - - [30/Sep/2014:23:58:33 +0200] GET http://www.google.com HTTP/1.1 200 u:123456789 new_data ourl:http://google.com/image ac:text ssl:1 
... 

這兩條線都非常相似,但在第二行是新價值new_data

在我的數據庫表中這些列:

|IP_1|IP_2|date_time|URL|HTTP_version|port|USER_ID|new_data|OURL|ac|ssl| 

SQL代碼

Load data local infile 'D:/log.txt' into table `data_table` fields terminated by ' ' lines terminated by '\n' 

如何從文本文件中解析'-','-','+0200','GET'?如果我在行中沒有值(最好的解決方案應該填充NULL),我應該如何填寫new_data列?

如果你能給我一些想法,我會非常感激。也可以是PHP腳本。

回答

1

因爲你加入PHP的標誌,在這裏我提出一個PHP的解決方案:

$line = "127.0.0.1 1.255.255.255 - - [30/Sep/2014:23:58:33 +0200] GET http://www.google.com HTTP/1.1 200 u:123456789 new_data ourl:http://google.com/image ac:text ssl:1"; 

if(preg_match('/^([^\\s]+)\\s([^\\s]+)\\s\\-\\s\\-\\s\\[([^\\]]+)\\]\\s[A-Z]+\\s([^\\s]+)\\s([^\\s]+)\\s([^\\s]+)\\su:([^\\s]+)\\s([^\\s]+)\\sourl:([^\\s]+)\\sac:([^\\s]+)\\sssl:([^\\s]+)/',$line,$m)) 
{ 
$v= array(); 
$v['IP_1']=$m[1]; 
$v['IP_2']=$m[2]; 
$v['date_time']=$m[3]; 
$v['URL']=$m[4]; 
$v['HTTP_version']=$m[5]; 
$v['HTTPcode']=$m[6]; 
$v['USER_ID']=$m[7]; 
$v['new_data']=$m[8]; 
$v['OURL']=$m[9]; 
$v['ac']=$m[10]; 
$v['ssl']=$m[11]; 
print_r($v); 
} 

注:這不是端口,但HTTP返回代碼那邊。

您可以瞭解更多關於PCRE上的文件http://php.net/manual/en/book.pcre.php

0

首先,file_get_contents()並保存其內容的變量,然後explode()\r\n。現在你可以循環這些內容,如下所示:

// ... inside the loop: 
// $log = $allLines[$i] where $i is an iterator. 
// Example log value: Client IP - - [31/Aug/2017:05:48:10 +0400] "GET/HTTP/1.1" 200 1020 "http://website.com/dir" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36" 

$parser = explode('"', $log); 
$ip = explode(" - - ", $parser[0]); 
$ip = $ip[0]; 
$info = $parser[1]; 
$location = $parser[3]; 
$browser = $parser[5]; 

echo "<tr> 
    <td>IP</td> 
    <td>Info</td> 
    <td>Location</td> 
    <td>Browser</td> 
    </tr> 
    <tr> 
    <td>$ip</td> 
    <td>$info</td> 
    <td>$location</td> 
    <td>$browser</td> 
    </tr>"; 
相關問題