• 05-01-2015, 14:14:52
    #1
    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++;
  • 06-01-2015, 11:38:40
    #2
    Yokmu bi fikri olan?
  • 08-01-2015, 00:49:14
    #3
    Yeni veriden kastınız nedir hocam, basitse mysql eklemek isterseniz ;

    mysql_query("INSERT INTO log(id, sutun1, sutun2, sutun3) values ('', 'dd', 'dd', 'dd')");
    gibi ekleyebilirsiniz..
  • 08-01-2015, 01:12:39
    #4
    Ceu adlı üyeden alıntı: mesajı görüntüle
    Yeni veriden kastınız nedir hocam, basitse mysql eklemek isterseniz ;

    mysql_query("INSERT INTO log(id, sutun1, sutun2, sutun3) values ('', 'dd', 'dd', 'dd')");
    gibi ekleyebilirsiniz..
    Yeni veri derken su sekilde oluyor. Log dosyasinda bulunan önceki veriler silinmiyor. Log dosyasina sürekli yeni veriler geliyor. Bu sekilde ben mysql ekleme isini yaparsam eklemis oldugu verileri tekrar basdan ekleyecek. Ben ama sadece eklenmemis olan verileri eklemek istiyorum
  • 08-01-2015, 14:47:05
    #5
    ylv
    Üyeliği durduruldu
    inanbayram adlı üyeden alıntı: mesajı görüntüle
    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')");