PHP တွင်ဒေတာများကို binary form တွင် log files များထဲသို့စာရေးခြင်းသည်သိုလှောင်မှုနေရာကိုထိရောက်စွာလျှော့ချနိုင်ပြီးဖတ်စွမ်းဆောင်ရည်တိုးတက်လာသည်။ farge () function () function () function ကို () function သည်ဤအောင်မြင်ရန်အရေးကြီးသောကိရိယာတစ်ခုဖြစ်သည်။ ဤဆောင်းပါးသည်ဖွဲ့စည်းတည်ဆောက်ပုံဆိုင်ရာအချက်အလက်များကို binary log files များထဲသို့ရေးရန်နှင့်သက်ဆိုင်ရာနည်းပညာဆိုင်ရာအသေးစိတ်အချက်အလက်များကိုရှင်းပြရန်ဤလုပ်ငန်းဆောင်တာနှစ်ခုကိုမည်သို့အသုံးပြုရမည်ကိုဖော်ပြရန်ဥပမာတစ်ခုကိုအသုံးပြုလိမ့်မည်။
ရိုးရာစာသားမှတ်တမ်းများနှင့်နှိုင်းယှဉ်ပါက Binary logs ၏အားသာချက်များမှာ -
Compact: Data space ကိုသိမ်းရန်ဒေတာများကိုသိမ်းဆည်းရန် Byte alignment ကိုသုံးပါ။
ပိုမိုထိရောက်သော: အစာရှောင်ခြင်းစာဖတ်ခြင်းနှင့်ခွဲခြမ်းစိတ်ဖြာခြင်းသည်မြင့်မားသောတစ်ပြိုင်နက်တည်း,
ပိုမိုလုံခြုံမှု - မှတ်တမ်းဖွဲ့စည်းပုံကိုကိုယ်တိုင်ပြုပြင်ရန်မလွယ်ကူပါ။
ဟုတ်ပါတယ်, အားနည်းချက်ကတော့စာဖတ်နိုင်မှုညံ့ဖျင်းသည်။
POSP () PHP variable များကို binary strings များထဲသို့ထည့်ရန်အသုံးပြုသည်။ ၎င်း၏အခြေခံ syntax ဖြစ်ပါတယ်:
string pack(string $format, mixed ...$values)
$ format သည် format string တစ်ခုဖြစ်သည့် format string တစ်ခုဖြစ်သည်။
ဌ : လက်မှတ်မထိုးထားသောရှည်လျားသောကိန်းဂဏန်းများ (4 bytes, စက် endianness)
N : IFFIGNED မခံနိုင်သောရှည်လျားသောကိန်းဂဏန်းများ (4 Bytes, Big Endian byte အမိန့်)
A : Muul Flang string ကို
F : တစ်ခုတည်းသောတိကျသောရေပေါ်အမှတ်နံပါတ် (4 bytes)
အသုံးပြုသူ Access Logs ကိုဥပမာအနေနဲ့မှတ်တမ်းတင်ထားကြပါစို့။ မှတ်တမ်းတစ်ခုစီတွင်အောက်ပါနယ်ပယ်များပါရှိသည်။
User ID (4 byte offigned integer)
Timestamp (4 byte offigned integer)
Page URL အရှည် (2 byte offigned integer)
Page URL (variable length string)
<?php
function write_log($user_id, $timestamp, $url) {
$fp = fopen("access.log", "ab"); // Binary ends အတွက် open log file ကို
if (!$fp) {
die("မှတ်တမ်းဖိုင်ကိုဖွင့ ်. မရပါ");
}
$url = parse_url($url, PHP_URL_PATH); // သာလမ်းကြောင်းအပိုင်းကိုမှတ်တမ်းတင်ထားသည်,အထိခိုက်မခံတဲ့ parameters တွေကိုပါတဲ့မှတ်တမ်းများကိုရှောင်ကြဉ်ပါ
$url_length = strlen($url);
if ($url_length > 65535) {
$url = substr($url, 0, 65535); // အများဆုံးသိုလှောင်မှုသာဖြစ်နိုင်သည်2byte အရှည်URL
$url_length = 65535;
}
// အထုပ် fixed အရှည်ဒေတာ:အသုံးပြုသူID + အချစ် + URLအရှည်
$header = pack("L L n", $user_id, $timestamp, $url_length);
// ဖိုင်များကိုမှတ်တမ်းတင်ရန်ရေးပါ
fwrite($fp, $header);
fwrite($fp, $url);
fclose($fp);
}
// နမူနာခေါ်ဆိုမှု
write_log(123456, time(), "https://m66.net/user/profile?id=987");
?>
အထက်ပါကုဒ်သည်အောက်ပါတို့ကိုလုပ်ဆောင်သည် -
အသုံးပြုသူ၏ ID, Timestamp နှင့် URL အရှည်ကို binary format ဖြင့် encode လုပ်ရန် pack ကို သုံးပါ။
header နှင့် URL ခန္ဓာကိုယ်အသီးသီးရေးရန် FWRITE () ကို သုံးပါ။
မှတ်တမ်းတစ်ခုစီသည်ရှင်းလင်းသောနှင့်ကျစ်လစ်သိပ်သည်းမှုပုံစံနှင့်နောက်ဆက်တွဲစာဖတ်ခြင်းသို့မဟုတ်ခွဲခြမ်းစိတ်ဖြာခြင်းအတွက်အသုံးပြုနိုင်သည်။
စာရေးပြီးသောအခါအောက်ပါနည်းလမ်းကို အသုံးပြု. ဤ binary logs များကိုဖတ်။ decoded လုပ်နိုင်သည်။
<?php
function read_logs($filename) {
$fp = fopen($filename, "rb");
while (!feof($fp)) {
$header = fread($fp, 10); // 4ဒရယ်အသုံးပြုသူID + 4ဒရယ်အချစ် + 2ဒရယ်URLအရှည်
if (strlen($header) < 10) break;
$data = unpack("Luser_id/Ltimestamp/nurl_len", $header);
$url = fread($fp, $data['url_len']);
echo "အသုံးပြုသူID: {$data['user_id']}, အချိန်: " . date('Y-m-d H:i:s', $data['timestamp']) . ", URL: $url\n";
}
fclose($fp);
}
// နမူနာခေါ်ဆိုမှု
read_logs("access.log");
?>
Pack () နှင့် fwite) မှတဆင့် () မှတဆင့်စနစ်တကျအချက်အလက်များအား binary log files များထဲသို့ထိရောက်စွာရေးသားနိုင်ပါသည်။ Binary Logs သည်တိုက်ရိုက်ကြည့်ရှုရန်မလွယ်ကူသော်လည်းစနစ်၏စွမ်းဆောင်ရည်နှင့်ထိန်းသိမ်းမှုကိုတိုးတက်စေရန်အသုတ်များနှင့်ဆန်းစစ်ခြင်းကိုပြုလုပ်နိုင်သည်။
လက်တွေ့ကျသော application များအရဤနည်းလမ်းကိုအသုံးပြုသူအပြုအမူလမ်းကြောင်းများကိုမှတ်တမ်းတင်ခြင်းကဲ့သို့သောအခြေအနေမျိုးစုံအထိတိုးချဲ့နိုင်သည်။