လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> မှတ်တမ်းဖိုင်ရှိ IP, အချိန်နှင့်အခြားကွက်လပ်များ၏စည်းလုံးညီညွတ်မှုပုံစံ

မှတ်တမ်းဖိုင်ရှိ IP, အချိန်နှင့်အခြားကွက်လပ်များ၏စည်းလုံးညီညွတ်မှုပုံစံ

M66 2025-05-18

ဆာဗာမှတ်တမ်းဖိုင်များပြုပြင်သည့်အခါကျွန်ုပ်တို့သည်ပြ problems နာများကိုမကိုက်ညီသောပုံစံများဖြင့်ပြ problems နာများမကြာခဏကြုံတွေ့ရလေ့ရှိသည်။ ဥပမာအားဖြင့် IP address သည်ဇေလိုပြည်နယ်များရှိနိုင်ပြီး Timestamp Format သည်ကိုက်ညီမှုရှိနိုင်သည်။ ဤကွက်လပ်များကိုတူညီစွာကိုင်တွယ်နိုင်ရန်အတွက် Preg_replace_callback_array သည်ပုံမှန်ဖော်ပြချက်မျိုးစုံကိုသီးခြားစီဖော်ပြရန်ကွဲပြားခြားနားသော callback လုပ်ဆောင်ချက်များကိုဖြည့်ဆည်းပေးရန်ခွင့်ပြုသည့်အလွန်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။

ဤဆောင်းပါးသည် Preg_replace_callback_array ကို အသုံးပြု. Prep နှင့် Time Fields ကို 0 တ်စုံတွင်တူညီသောပုံစံဖြင့်မည်သို့အသုံးပြုရမည်ကိုမိတ်ဆက်ပေးလိမ့်မည်။

နမူနာမှတ်တမ်းပုံစံ

ကျွန်ုပ်တို့တွင်အောက်ပါမှတ်တမ်းများ (ရိုးရှင်းသောဗားရှင်း) ရှိသည်ဆိုပါစို့။

 127.000.000.001 - - [21/Apr/2025:15:32:01 +0000] "GET /index.php?id=123 HTTP/1.1" 200
192.168.1.10 - - [21-Apr-2025 15:32:01] "POST /submit.php HTTP/1.1" 404

ကြှနျုပျတို့ ... မြျှောလငျ့ပါတယျ:

  • IP address ကိုပုံမှန် (ဦး ဆောင်သောသုညများကိုဖယ်ရှားခြင်း);

  • အချိန်ကို Yyy-MM-DD HH: MM: Ss format ဖြင့်ပေါင်းစည်းခြင်း,

  • optional ကို: ဥပမာ - လမ်းကြောင်းအတွက် parameters တွေကို parameters တွေကိုကြည့်ပါ။ ဥပမာ /index.php?id=123/index.php

Preg_replace_callback_array ကိုအသုံးပြုပြီးအကောင်အထည်ဖော်ခြင်း

 <?php

$log = <<<LOG
127.000.000.001 - - [21/Apr/2025:15:32:01 +0000] "GET /index.php?id=123 HTTP/1.1" 200
192.168.1.10 - - [21-Apr-2025 15:32:01] "POST /submit.php HTTP/1.1" 404
LOG;

// ပုံမှန်နှင့်သက်ဆိုင်ရာအပြောင်းအလဲနဲ့ callbacks သတ်မှတ်
$patterns = [
    // IP လိပ်စာပုံစံ:ဦး ဆောင် Zeros ဖယ်ရှားပါ
    '/\b(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})\b/' => function ($matches) {
        return implode('.', array_map('intval', array_slice($matches, 1, 4)));
    },

    // Apache Timestamp [21/Apr/2025:15:32:01 +0000]
    '/\[(\d{2})\/(\w{3})\/(\d{4}):(\d{2}):(\d{2}):(\d{2}) [+\-]\d{4}\]/' => function ($matches) {
        $monthMap = [
            'Jan' => '01', 'Feb' => '02', 'Mar' => '03', 'Apr' => '04',
            'May' => '05', 'Jun' => '06', 'Jul' => '07', 'Aug' => '08',
            'Sep' => '09', 'Oct' => '10', 'Nov' => '11', 'Dec' => '12'
        ];
        return sprintf('%s-%s-%s %s:%s:%s',
            $matches[3],                         // ခုနှစ်
            $monthMap[$matches[2]] ?? '01',     // လ
            $matches[1],                         // နေ့
            $matches[4], $matches[5], $matches[6]
        );
    },

    // နေ့志格式中另一种时间 [21-Apr-2025 15:32:01]
    '/(\d{2})-(\w{3})-(\d{4}) (\d{2}):(\d{2}):(\d{2})/' => function ($matches) {
        $monthMap = [
            'Jan' => '01', 'Feb' => '02', 'Mar' => '03', 'Apr' => '04',
            'May' => '05', 'Jun' => '06', 'Jul' => '07', 'Aug' => '08',
            'Sep' => '09', 'Oct' => '10', 'Nov' => '11', 'Dec' => '12'
        ];
        return sprintf('%s-%s-%s %s:%s:%s',
            $matches[3],
            $monthMap[$matches[2]] ?? '01',
            $matches[1],
            $matches[4], $matches[5], $matches[6]
        );
    },

    // ရေွှ့ URL တေးရေး(ကဲ့သို့ /index.php?id=123 → /index.php)
    '#(GET|POST|PUT|DELETE|HEAD) (/[\w\-\/\.]+)(\?[^\s"]*)?#' => function ($matches) {
        return $matches[1] . ' ' . $matches[2];
    }
];

// လျှောက်လွှာအစားထိုး
$formatted = preg_replace_callback_array($patterns, $log);

// ရလဒ်ရလဒ်
echo nl2br(htmlspecialchars($formatted));
?>

ရလဒ်ရလဒ်

အထက်ပါ script ကိုဖွင့်ပြီးနောက်, မှတ်တမ်းအကြောင်းအရာများကို format လုပ်လိမ့်မည်။

 127.0.0.1 - - 2025-04-21 15:32:01 "GET /index.php HTTP/1.1" 200  
192.168.1.10 - - 2025-04-21 15:32:01 "POST /submit.php HTTP/1.1" 404

အကျဉ်းချုပ်

Preg_replace_callback_array ဖြင့်ကျွန်ုပ်တို့သည်ကွက်လပ်ရှိပုံစံအမျိုးမျိုးဖြင့်ပုံစံအမျိုးမျိုးကိုအလွန်လှပသောနည်းဖြင့်ကိုင်တွယ်နိုင်ကြသည်။ ၎င်း၏အားသာချက်မှာ Modes မျိုးစုံကိုတစ်ပြိုင်တည်းကိုင်တွယ်ခြင်းသည်တစ်ပြိုင်နက်တည်းလုပ်ဆောင်သည်။ တစ်ခုချင်းစီတွင်ကိုယ်ပိုင် callback function ကိုလွတ်လပ်စွာပြုလုပ်နိုင်သည်။