Merhaba arkadaslar,
preg_match ile log dosyasindan cekdigim verileri mysql databanka yüklemek istiyorum.
Sorunum surda:
Log'da sadece yeni verileri mysql'e eklemesini istiyorum. Bu islemi nasil yapabilirim?
Suan kullandigim script bu:
$ac_arr = file('/usr/local/server/logs/in.log');
$astring = join("", $ac_arr);
$astring = preg_replace("//", "", $astring);
$records = preg_split("/ip-([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)-ip/", $astring, -1, PREG_SPLIT_DELIM_CAPTURE);
$sizerecs = sizeof($records);
// now split into records
$i = 1;
$each_rec = 0;
while($i<$sizerecs) {
$ip = $records[$i];
$all = $records[$i+1];
// parse other fields
preg_match("/time-(.*)......-time/", $all, $match);
$access_time = $match[1];
preg_match("/status-(.*?)-status/", $all, $match);
$success_code = $match[1];
preg_match("/useragent-(.*?)-useragent/", $all, $match);
$useragent = $match[1];
preg_match("/bandt-([0-9]+\b)-bandt/", $all, $match);
$bytes = $match[1];
preg_match("/user-(.*?)-user/", $all, $match);
$user = $match[1];
preg_match("/port-(.*?)-port/", $all, $match);
$channel = $match[1];
// advance to next record
$i = $i + 2;
$each_rec++;
dosyadan okuduğunuz her bir log satırına özel (useragent,bytes,user vs bilgileri kullanarak) hash oluşturacaksınız.
veritabanında hash sütununa unique index ekliyeceksiniz, ekleme işlemi sırasında varmı yokmu gibi kontrol yapmanızada gerek yok.
INSERT INTO yerine INSERT IGNORE INTO kullanacaksınız.
mysql_query("INSERT IGNORE INTO log(hashid, sutun1, sutun2, sutun3) values ('', 'dd', 'dd', 'dd')");