Понадобилось как то мне изучить один лог файл такого вида.
1235681402.549 60 192.168.3.178 TCP_MISS/200 1893 GET http://cs56.vkontakte.ru/u913861/c_cd95200a.jpg — DIRECT/93.186.224.56 image/jpeg 1235681402.568 28 192.168.3.178 TCP_MISS/200 1768 GET http://cs538.vkontakte.ru/u734614/c_c39c4cb0.jpg — DIRECT/93.186.227.48 image/jpeg 1235681402.646 98 192.168.3.178 TCP_MISS/200 2506 GET http://cs172.vkontakte.ru/u939545/c_4fcb27dc.jpg — DIRECT/93.186.225.22 image/jpeg 1235681402.704 69 192.168.3.178 TCP_MISS/200 1832 GET http://cs10.vkontakte.ru/u414810/c_502e4ee.jpg — DIRECT/93.186.224.10 image/jpeg 1235681402.945 123 192.168.3.178 TCP_MISS/200 10644 GET http://cs39.vkontakte.ru/g205031/a_e685a74.jpg — DIRECT/93.186.224.39 image/jpeg 1235681403.156 42 192.168.3.178 TCP_MISS/200 362 GET http://counter.yadro.ru/hit? — DIRECT/88.212.196.77 image/gif 1235681403.202 102 192.168.3.178 TCP_MISS/302 794 GET http://ad.adriver.ru/cgi-bin/erle.cgi? — DIRECT/81.222.128.22 text/html 1235681403.222 67 192.168.3.178 TCP_MISS/200 2794 GET http://cs676.vkontakte.ru/u991778/c_9b855214.jpg — DIRECT/93.186.226.146 image/jpeg 1235681403.235 53 192.168.3.178 TCP_MISS/200 2817 GET http://cs4146.vkontakte.ru/u238362/c_bf859673.jpg — DIRECT/93.186.239.50 image/jpeg
Это логи файл с прокси провайдера трафика одного пользователя. Первый столбик время, второй — время загрузка файла в миллисекундах, третий — ip пользователя, четвёртый — я не знаю, пятый размер скаченного файла, потом GET, седьмой адрес скаченного файла и ещё что-то непонятное. Надо было мне посмотреть всё правильно ли посчитано и вообще что к чему. Так как таких строчек было около 8000 я решил написать скрипт который разобрал бы этот файл и записал его в базу данных. Писать я решил на PHP а базу данных на mySQL.
Первое что я решил сделать привести файл в более удобный вид: я заменил все разделители на « » один пробел. То есть в обычном блокноте заменил все знак «-» на « » и несколько раз прогнал замену символов « »(два пробела) на « »(один пробел). Всё у меня получился отличный файл для разбора.
А вот и код скрипта:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <?php $db_host = "localhost"; $db_user = "root"; $db_password = "pass"; $db_name = "logs"; $connection = mysql_connect ($db_host, $db_user, $db_password) or die ("error connectio"); mysql_select_db($db_name, $connection) or die (mysql_error()); $file_name = "log"; $array=file($file_name); foreach ($array as $stroka) { $slovo = explode(" ",$stroka); $newtime = date("Y:m:d:H:i:s",$slovo[0]); $query = "Insert into logs2 values('$newtime',$slovo[1],'$slovo[2]','$slovo[3]',$slovo[4],'$slovo[5]','$slovo[6]','$slovo[7]','$slovo[8]')"; mysql_query ($query, $connection); } ?> |
Комментарии к коду для полых новичков:
Вначале задаём параметры для подключения к базе данных и коннектимся к ней.
$file_name = “log” имя лог файла он лежит в той же папке где и сам скрипт.
Команда $array=file($file_name); построчно считывает файл в массив $array.
Команда foreach ($array as $stroka) перебирает все элементы массива $array выполняет то, что находится в фигурных скобках, теперь каждый элемент массива $array переименован в $stroka и в ей хранится одна строчка лог файла.
Команда $slovo = explode(” “,$stroka); разбирает строчку на слова используя разделитель « »(пробел).
Команда $newtime = date(”Y:m:d:H:i:s”,$slovo[0]); приводит дату в нормальный вид.
Ну и записываем всё в базу данных.
База данных создаётся такой строчкой.
CREATE TABLE logs2 (time datetime, ms int(11), ip_to char(15), tcp char(20), size int(11), get char(10), adr varchar(100), ip_from varchar(20), obj varchar(20));
В принципе, скрипт получился довольно универсальный для решения простых задач. Может кому понадобится.
Гипсокартон купить гкл по цене гипсокартонный лист цена. ремонт ноутбуков череповец