PHP တွင်ဒေတာသမာဓိစစ်ဆေးခြင်း, data integrication scressification, hash_file () နှင့် hash_update_strame ()) ကိုထုတ်လုပ်သည့်အခါဒေတာသမာဓိစစ်ဆေးခြင်း, နှစ်ခုမှာအလားတူလုပ်ဆောင်ချက်တွေရှိသော်လည်းစွမ်းဆောင်ရည်ကွဲပြားခြားနားမှုအချို့ရှိပါသည်။ ဤဆောင်းပါးသည်ဤနည်းစနစ်နှစ်ခုအကြားစွမ်းဆောင်ရည်ကွဲပြားခြားနားမှုများကိုနှိုင်းယှဉ်ထားပြီး developer များကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းသည်သူတို့၏လျှောက်လွှာများ၏ထိရောက်မှုကိုတိုးတက်စေရန်မှန်ကန်သောလုပ်ဆောင်မှုများကိုပိုမိုရွေးချယ်ပါ။
Hash_File () function ကိုသတ်မှတ်ထားသောဖိုင်၏ hash တန်ဖိုးကိုတိုက်ရိုက်တွက်ချက်ရန်အသုံးပြုသည်။ Syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
string hash_file ( string $algo , string $filename [, bool $binary = false ] )
$ algo : MD5 , Sha256 စသည့်အသားခန်း algorithm ကိုအသုံးပြုသည်။
$ filename : hash တန်ဖိုးကိုတွက်ချက်ရန်ဖိုင်ကိုညွှန်ပြသည့်ဖိုင်ကိုညွှန်ပြသည့်ဖိုင်လမ်းကြောင်း။
$ binary : အကယ်. မှန် လျှင် binary hash တန်ဖိုးကိုပြန်ပို့ပါ။ အကယ်. မှားယွင်းသော အခါ hexadecimal hash တန်ဖိုးကိုပြန်ပို့ပါ။
ဥပမာအားဖြင့်, ဖိုင်တစ်ခု၏ sha256 hash တန်ဖိုးကိုတွက်ချက်ပါ။
$fileHash = hash_file('sha256', 'largefile.txt');
Hash_File () သည်အလွန်လွယ်ကူသောနည်းလမ်းတစ်ခုဖြစ်ပြီးဖိုင်တစ်ခုလုံးကိုအလိုအလျောက်ဖတ်ပြီး hash တန်ဖိုးကိုတွက်ချက်သည်။ သို့သော်ကြီးမားသောဖိုင်များကိုလုပ်ဆောင်သောအခါဖိုင်တစ်ခုလုံးကိုတိုက်ရိုက်ဖတ်ရှုသောအခါအထူးသဖြင့်မှတ်ဉာဏ်အကန့်အသတ်ရှိသောပတ်ဝန်းကျင်တွင်ပါ 0 င်နိုင်သည်။
Hash_File () , hash_update_stream () နှင့်မတူသည်မှာ Segments များတွင် hash တန်ဖိုးများကိုတွက်ချက်ရန်နည်းလမ်းတစ်ခုဖြစ်သည်။ ၎င်းသည် hash ကိုတွက်ချက်သောအခါဖိုင်အကြောင်းအရာကိုအဆင့်ဆင့်ဖတ်ရန်ခွင့်ပြုသည်။ ၎င်းသည်ကြီးမားသောဖိုင်များအတွက်အထူးသဖြင့်ဖိုင်တစ်ခုလုံးအတွက်အထူးအသုံးဝင်သည်, ၎င်းသည်ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့ထည့်သွင်းရန်မလိုအပ်ပါ,
bool hash_update_stream ( resource $context , string $data [, int $length = 0 ] )
$ Context : hash_init မှတဆင့်ဖန်တီးထားသောအခြေအနေတွင်ရှိသည်။
$ ဒေတာ : တွက်ချက်ခံရဖို့ဒေတာ၏အစိတ်အပိုင်းတစ်ခု။
$ အရှည် : ဖတ်ရှုဖို့ဒေတာအရှည်ကိုသတ်မှတ်ခြင်း, optional parameter သည်။
ဖိုင်ကြီးတစ်ပါးကိုတွက်ချက်ရန်အခြေခံအဆင့်များသည်အောက်ပါအတိုင်းဖြစ်သည် -
$hashContext = hash_init('sha256'); // Hash အခြေအနေကိုစတင်ပါ
$handle = fopen('largefile.txt', 'rb'); // ဖိုင်ကိုဖွင့်ပါ
while (!feof($handle)) {
$data = fread($handle, 8192); // funks အတွက်ဖိုင်များကိုဖတ်ပါ
hash_update_stream($hashContext, $data); // update hash
}
$hash = hash_final($hashContext); // နောက်ဆုံး hash တန်ဖိုးကိုရယူပါ
fclose($handle);
funks များတွင်ဖိုင်များကိုအတုံးများဖတ်ရှုခြင်းနှင့် hash တန်ဖိုးများကိုအသစ်များကိုမွမ်းမံခြင်းအားဖြင့်ဤနည်းလမ်းသည်မှတ်ဥာဏ်ကိုပိုမိုထိရောက်စွာစီမံနိုင်ပြီးကြီးမားသောဖိုင်များပြုပြင်ရန်သင့်တော်သည်။
Hash_File () - ဤလုပ်ဆောင်ချက်သည်ဖိုင်တစ်ခုလုံးကို Hash တွက်ချက်မှုအတွက်တစ်ချိန်တည်းတွင်ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့ထည့်ပြီးဖိုင်အရွယ်အစားသည်အလယ်အလတ်ရှိသည့်အခြေအနေများအတွက်သင့်တော်သည်။ အကယ်. ဖိုင်သည်အလွန်ကြီးမားသော (ထိုကဲ့သို့သော GB ကဲ့သို့သော) သည်အလွန်ကြီးမားသည်ဆိုပါကမှတ်ဉာဏ်အသုံးပြုမှုသည်အလွန်အကျွံသုံးစွဲမှုကိုဖြစ်ပေါ်စေပြီးမှတ်ဉာဏ်ပြည့်လျှံသောအမှားများကိုဖြစ်စေနိုင်သည်။
Hash_update_stream () - ဤနည်းလမ်းသည်ဖိုင်အဆင့်ကိုတစ်ဆင့်ပြီးတစ်ဆင့်ပြီးအဆင့်ဆင့်ကိုအသစ်ပြောင်းသည်။ ထို့ကြောင့်မှတ်ဉာဏ်အသုံးပြုမှုသည်နိမ့်ကျသည်။ ကြီးမားသောဖိုင်များအတွက် hash_update_stream () သည် အားသာချက်များပိုမိုများပြားသောကြောင့်ဖိုင်တစ်ခုလုံးတွင်အချက်အလက်များကိုသာသိမ်းဆည်းထားသဖြင့်ဖိုင်တစ်ခုလုံးကိုတင်ရန်အတွက်မှတ်ဥာဏ်လိုအပ်ချက်ကိုရှောင်ရှားရန်ပိုမိုအားသာချက်များရှိသည်။
မြန်နှုန်းအရ Hash_File () သည် များသောအားဖြင့်စွမ်းဆောင်ရည်မြင့်မားသောကြောင့်၎င်းသည်စွမ်းဆောင်ရည်မြင့်မားသည်။ သို့သော်ဖိုင်အရွယ်အစားတိုးလာသည်နှင့်အမျှ၎င်း၏စွမ်းဆောင်ရည်သည်မှတ်ဥာဏ်အကန့်အသတ်ဖြင့်ထိခိုက်နိုင်သည်။
ဆန့်ကျင်ဘက်အနေဖြင့် hash_update_stream () သည် code execution logic (ဥပမာ hash ၏တဖြည်းဖြည်းစာဖတ်ခြင်းနှင့်တဖြည်းဖြည်းချင်းစာဖတ်ခြင်းနှင့်တဖြည်းဖြည်းချင်းဆွေးနွေးခြင်း) လိုအပ်သည်။
hash_update_stream () သည် ပိုမိုပြောင်းလွယ်ပြင်လွယ်ပေးသည်။ Developer များသည် Memory Footprint နှင့် Speed အကြားမျှတမှုကိုရှာဖွေရန် (Fread ) ၏အရွယ်အစားတစ်ခုစီ၏အရွယ်အစားကိုထိန်းချုပ်နိုင်သည်။ ကြီးမားသောဖိုင်များအတွက်တော့ Read block ၏အရွယ်အစားကိုဆာဗာ၏မှတ်ဉာဏ်အရစွမ်းဆောင်ရည်ကိုကောင်းမွန်အောင်ပြုလုပ်နိုင်သည်။
hash_file () - လုပ်ငန်းများ၌ဖိုင်များသည်သေးငယ်သောအခါ system memory သည်လုံလောက်ပြီး system memory သည်လုံလောက်သည်။
Hash_Update_stream () - Memory-Limited Areature ပတ်ဝန်းကျင်တွင်သို့မဟုတ်မှတ်ဥာဏ်အကန့်အသတ်ရှိသောပတ်ဝန်းကျင်တွင်သို့မဟုတ် Memory-Limited Areathodical environments in hash_update_stream () တွင် ပိုမိုသင့်တော်သည်။
နှစ်ခုအကြားစွမ်းဆောင်ရည်ကွဲပြားခြားနားမှုများကိုထပ်မံအတည်ပြုရန်, ၎င်းတို့ကိုရိုးရှင်းသောကုဒ်အပိုင်းအစတစ်ခုဖြင့်စမ်းသပ်နိုင်သည်။
$start = microtime(true);
$hash = hash_file('sha256', 'largefile.txt');
$end = microtime(true);
echo "hash_file took: " . ($end - $start) . " seconds.\n";
$start = microtime(true);
$hashContext = hash_init('sha256');
$handle = fopen('largefile.txt', 'rb');
while (!feof($handle)) {
$data = fread($handle, 8192);
hash_update_stream($hashContext, $data);
}
$hash = hash_final($hashContext);
fclose($handle);
$end = microtime(true);
echo "hash_update_stream took: " . ($end - $start) . " seconds.\n";
Code နှစ်ခုအပိုင်းပိုင်း၏ကွပ်မျက်မှုအချိန်ကိုနှိုင်းယှဉ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်နည်းစနစ်နှစ်ခုအကြားစွမ်းဆောင်ရည်ကွဲပြားခြားနားမှုများကိုအမှန်တကယ်နားလည်နိုင်သည်။
အသေးစားနှင့်အလတ်စားဖိုင်များအတွက် Hash_File () သည်ရိုးရှင်းလွယ်ကူပြီးအသုံးပြုရလွယ်ကူပြီးပိုမိုမြန်ဆန်ပြီးလိုအပ်ရာအများစုနှင့်ကိုက်ညီရန်လုံလောက်သည်။
ကြီးမားသောဖိုင်များအတွက် Hash_update_stream () သည် မှတ်ဥာဏ်ကိုထိန်းချုပ်ရန်နှင့်မှတ်ဉာဏ်အကန့်အသတ်ရှိသောပတ်ဝန်းကျင်တွင်အသုံးပြုရန်သင့်တော်သည်။
မှန်ကန်သောဆေးထည့်သောနည်းလမ်းကိုရွေးချယ်ခြင်းသည်စွမ်းဆောင်ရည်ကိုတိုးတက်စေရုံသာမကအရင်းအမြစ်များကိုဖြုန်းတီးခြင်းကိုလည်းရှောင်ရှားနိုင်သည်။ ကြီးမားသောဖိုင်အမျိုးအစားအတွက် Hash_update_stream () ကို အသုံးပြုရန်အတွက်၎င်းကို Memory Footprint နှင့်ပိုမိုတည်ငြိမ်သောစွမ်းဆောင်ရည်ရှိသည်။