PHP တွင်ဖိုင်အသံများပြုလုပ်သောအခါအထူးသဖြင့်လုပ်ငန်းလည်ပတ်မှု၏အနုမြူဗုံးနှင့်လုံခြုံမှုကိုသေချာစေရန်အထူးသဖြင့်လုပ်ငန်းစဉ်ဘာသာစကားမျိုးစုံသို့မဟုတ် Multi-threaded ပတ်ဝန်းကျင်တွင်ဖြစ်သည်။ သိုးစု () function နှင့် function () function) သည်အသုံးများသောကိရိယာနှစ်ခုဖြစ်သည်။ ၎င်းတို့သည်ဖိုင်အမျိုးအစားများ၏သမာဓိကိုထိရောက်စွာသေချာစွာသိရှိနိုင်ပြီးဒေတာပြိုင်ဆိုင်မှုကိုရှောင်ရှားနိုင်သည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်ချက်နှစ်ခု၏အခန်းကဏ် find ကိုအသေးစိတ်မိတ်ဆက်ပေးလိမ့်မည်။
FATCH () function ကို function ကိုတစ်ချိန်တည်းတွင်အလားတူဖိုင်များကိုပြုပြင်ခြင်းမျိုးစုံကိုရှောင်ရှားရန်ဖိုင်များကိုသော့ခတ်ရန်အသုံးပြုသည်။ ၎င်းသည်သော့ခတ်ခြင်းအမျိုးအစားနှစ်မျိုးကိုပေးသည်။ Shared Lock_SH ( Lock_sh ) နှင့်သီးသန့်သော့ခတ်ခြင်း ( Lock_ex ) ။
Shared Lock (Lock_sh) - လုပ်ငန်းစဉ်များစွာကိုဖိုင်များကိုဖတ်ရန်ခွင့်ပြုသော်လည်းစာရေးခြင်းကိုခွင့်မပြုပါ။
သီးသန့်သော့ခတ် (Lock_ex) - သီးသန့်သော့ခတ်ခြင်း, လုပ်ငန်းစဉ်တစ်ခုစီကိုဖိုင်များရေးရန်ခွင့်ပြုသည်, အခြားဖြစ်စဉ်များသည်စာမဖတ်နိုင်သော်လည်း
နမူနာကုဒ်:
<?php
$fp = fopen('data.txt', 'c+');
if (flock($fp, LOCK_EX)) { // သီးသန့်သော့ခတ်ထည့်ပါ
// ဖိုင်အရေးအသားစစ်ဆင်ရေးလုပ်ဆောင်ပါ
fwrite($fp, "ဒေတာရေးပါ\n");
fflush($fp); // File System သို့ Buffer ဒေတာများကိုရေးပါ
flock($fp, LOCK_UN); // သော့ခတ်ကိုလွှတ်လိုက်ပါ
}
fclose($fp);
?>
PHP ကိုယ်တိုင်က function () function ကိုတိုက်ရိုက် function ကိုတိုက်ရိုက်မပေးပါဘူး ။ Fullush () သည် ကြားခံကို flush လုပ်လိမ့်မည်ဖြစ်သော်လည်း Disk Data ကိုဆက်လက်တည်မြဲလိမ့်မည်ဟုမအာမခံနိုင်ပါ။ Linux ပတ် 0 န်းကျင်တွင် Stream_Get_meta_DA_DATA နှင့် FSCT မှတဆင့် POX_FSSYNC နှင့်အတူအကောင်အထည်ဖော်နိုင်သည်။
နမူနာခေါ်ဆိုမှု (ပံ့ပိုးထားသောပတ်ဝန်းကျင်တွင်):
<?php
$fp = fopen('data.txt', 'c+');
if (flock($fp, LOCK_EX)) {
fwrite($fp, "ဒေတာရေးပါ\n");
fflush($fp);
// posix_fsyncဒေတာ disk ကိုရေးထားကြောင်းသေချာပါစေ
if (function_exists('posix_fsync')) {
posix_fsync($fp);
}
flock($fp, LOCK_UN);
}
fclose($fp);
?>
Utticity : သိုးစု () သည်တစ်ချိန်တည်းတွင်အချက်အလက်ပြိုင်ဆိုင်မှုကိုရှောင်ရှားခြင်း,
Security - Fulfush () နှင့် FSSYNC (သို့မဟုတ်အလားတူလုပ်ဆောင်ချက်များ) ကို အသုံးပြု. အချက်အလက်များပျက်ကျခြင်းကြောင့်ဒေတာများကိုဆုံးရှုံးခြင်းသို့မဟုတ်လျှပ်စစ်ဓာတ်အားပြတ်တောက်မှုကြောင့်အချက်အလက်များကိုမပျောက်စေနိုင်သည့်နေရာများသို့ရေးသည်။
ပြီးပြည့်စုံသောဥပမာ -
<?php
$file = '/path/to/data.txt';
$fp = fopen($file, 'c+');
if (!$fp) {
die('ဖိုင်ကိုဖွင့ ်. မရပါ');
}
if (flock($fp, LOCK_EX)) {
// ဖိုင်ကိုဖိုင်၏အဆုံးသို့ရွှေ့ပါ,လွှမ်းခြုံခြင်းကိုရှောင်ပါ
fseek($fp, 0, SEEK_END);
fwrite($fp, "安全ဒေတာရေးပါ\n");
fflush($fp); // သေတမ်းစာPHPBuffer Data သည် operating system cache ကိုရေးသည်
// ထောက်ပံ့ system ကိုပတ်ဝန်းကျင်မှာ,အသုံးပြုfsync系统调用သေတမ်းစာ数据写入磁盘
if (function_exists('posix_fsync')) {
posix_fsync($fp);
}
flock($fp, LOCK_UN);
} else {
echo "ဖိုင်သော့ခတ်မရနိုင်ပါ";
}
fclose($fp);
?>
တစ်ပြိုင်နက်တည်းရေးသားစဉ်ကအချက်အလက်မမှန်ကန်ကြောင်းကာကွယ်ခြင်းမှကာကွယ်ရန်သော့ခတ်ထားသောယန္တရားမှတစ်ဆင့်ပိတ်ဆို့ခြင်းယန္တရားမှတစ်ဆင့် block () တစ်ပြိုင်နက်တည်း formacrent account များကိုသေချာစေသည်။
FFFlush () နှင့် FSYNC () အချက်အလက်များကိုပရိုဂရမ်ကြားခံမှ operating system cache သို့ရေးသားပြီး data security ကို data security ကိုချိန်ညှိခြင်းအားဖြင့်တစ်ပြိုင်တည်းချိန်ကိုက်ရန်သေချာစေပါ။
နှစ်ခုပေါင်းစပ်ခြင်းသည်ဖိုင်ရေးသားခြင်းလုပ်ငန်းစဉ်တွင်အန္တရာယ်များကိုများစွာလျော့နည်းစေပြီး log ရေးသားခြင်းနှင့် configuration file အသစ်များကဲ့သို့သောအခြေအနေများအတွက်သင့်လျော်သည်။
ဖွံ့ဖြိုးတိုးတက်မှုတွင်ဖိုင်အမျိုးအစားနှင့်လုံခြုံရေးကိုသေချာစေရန်လိုအပ်ပါက FLSYNC ၏စိတ်ကူးဖြင့် သိုးစု () ကို အသုံးပြုရန်အကြံပြုသည်။
<?php
$file = 'https://m66.net/path/to/data.txt';
$fp = fopen($file, 'c+');
if (!$fp) {
die('ဖိုင်ကိုဖွင့ ်. မရပါ');
}
if (flock($fp, LOCK_EX)) {
fseek($fp, 0, SEEK_END);
fwrite($fp, "安全ဒေတာရေးပါ\n");
fflush($fp);
if (function_exists('posix_fsync')) {
posix_fsync($fp);
}
flock($fp, LOCK_UN);
} else {
echo "ဖိုင်သော့ခတ်မရနိုင်ပါ";
}
fclose($fp);
?>