လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> hash_file အစား hash_update_stream () ကိုအသုံးပြုခြင်း၏စွမ်းဆောင်ရည်နှိုင်းယှဉ်ခြင်း ()

hash_file အစား hash_update_stream () ကိုအသုံးပြုခြင်း၏စွမ်းဆောင်ရည်နှိုင်းယှဉ်ခြင်း ()

M66 2025-06-05

PHP တွင်ဒေတာသမာဓိစစ်ဆေးခြင်း, data integrication scressification, hash_file () နှင့် hash_update_strame ()) ကိုထုတ်လုပ်သည့်အခါဒေတာသမာဓိစစ်ဆေးခြင်း, နှစ်ခုမှာအလားတူလုပ်ဆောင်ချက်တွေရှိသော်လည်းစွမ်းဆောင်ရည်ကွဲပြားခြားနားမှုအချို့ရှိပါသည်။ ဤဆောင်းပါးသည်ဤနည်းစနစ်နှစ်ခုအကြားစွမ်းဆောင်ရည်ကွဲပြားခြားနားမှုများကိုနှိုင်းယှဉ်ထားပြီး developer များကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်ခြင်းသည်သူတို့၏လျှောက်လွှာများ၏ထိရောက်မှုကိုတိုးတက်စေရန်မှန်ကန်သောလုပ်ဆောင်မှုများကိုပိုမိုရွေးချယ်ပါ။

1 ။ Hash_File ကိုမိတ်ဆက် ()

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 င်နိုင်သည်။

2 ။ HASH_UPDATE_STREAM ()

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 တန်ဖိုးများကိုအသစ်များကိုမွမ်းမံခြင်းအားဖြင့်ဤနည်းလမ်းသည်မှတ်ဥာဏ်ကိုပိုမိုထိရောက်စွာစီမံနိုင်ပြီးကြီးမားသောဖိုင်များပြုပြင်ရန်သင့်တော်သည်။

3 ။ စွမ်းဆောင်ရည်ကွာခြားချက်ခွဲခြမ်းစိတ်ဖြာ

3.1 မှတ်ဉာဏ်အသုံးပြုမှု

  • Hash_File () - ဤလုပ်ဆောင်ချက်သည်ဖိုင်တစ်ခုလုံးကို Hash တွက်ချက်မှုအတွက်တစ်ချိန်တည်းတွင်ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့ထည့်ပြီးဖိုင်အရွယ်အစားသည်အလယ်အလတ်ရှိသည့်အခြေအနေများအတွက်သင့်တော်သည်။ အကယ်. ဖိုင်သည်အလွန်ကြီးမားသော (ထိုကဲ့သို့သော GB ကဲ့သို့သော) သည်အလွန်ကြီးမားသည်ဆိုပါကမှတ်ဉာဏ်အသုံးပြုမှုသည်အလွန်အကျွံသုံးစွဲမှုကိုဖြစ်ပေါ်စေပြီးမှတ်ဉာဏ်ပြည့်လျှံသောအမှားများကိုဖြစ်စေနိုင်သည်။

  • Hash_update_stream () - ဤနည်းလမ်းသည်ဖိုင်အဆင့်ကိုတစ်ဆင့်ပြီးတစ်ဆင့်ပြီးအဆင့်ဆင့်ကိုအသစ်ပြောင်းသည်။ ထို့ကြောင့်မှတ်ဉာဏ်အသုံးပြုမှုသည်နိမ့်ကျသည်။ ကြီးမားသောဖိုင်များအတွက် hash_update_stream () သည် အားသာချက်များပိုမိုများပြားသောကြောင့်ဖိုင်တစ်ခုလုံးတွင်အချက်အလက်များကိုသာသိမ်းဆည်းထားသဖြင့်ဖိုင်တစ်ခုလုံးကိုတင်ရန်အတွက်မှတ်ဥာဏ်လိုအပ်ချက်ကိုရှောင်ရှားရန်ပိုမိုအားသာချက်များရှိသည်။

3.2 မြန်နှုန်းကွာခြားချက်

မြန်နှုန်းအရ Hash_File () သည် များသောအားဖြင့်စွမ်းဆောင်ရည်မြင့်မားသောကြောင့်၎င်းသည်စွမ်းဆောင်ရည်မြင့်မားသည်။ သို့သော်ဖိုင်အရွယ်အစားတိုးလာသည်နှင့်အမျှ၎င်း၏စွမ်းဆောင်ရည်သည်မှတ်ဥာဏ်အကန့်အသတ်ဖြင့်ထိခိုက်နိုင်သည်။

ဆန့်ကျင်ဘက်အနေဖြင့် hash_update_stream () သည် code execution logic (ဥပမာ hash ၏တဖြည်းဖြည်းစာဖတ်ခြင်းနှင့်တဖြည်းဖြည်းချင်းစာဖတ်ခြင်းနှင့်တဖြည်းဖြည်းချင်းဆွေးနွေးခြင်း) လိုအပ်သည်။

3.3 ပြောင်းလွယ်ပြင်လွယ်

hash_update_stream () သည် ပိုမိုပြောင်းလွယ်ပြင်လွယ်ပေးသည်။ Developer များသည် Memory Footprint နှင့် Speed ​​အကြားမျှတမှုကိုရှာဖွေရန် (Fread ) ၏အရွယ်အစားတစ်ခုစီ၏အရွယ်အစားကိုထိန်းချုပ်နိုင်သည်။ ကြီးမားသောဖိုင်များအတွက်တော့ Read block ၏အရွယ်အစားကိုဆာဗာ၏မှတ်ဉာဏ်အရစွမ်းဆောင်ရည်ကိုကောင်းမွန်အောင်ပြုလုပ်နိုင်သည်။

3.4 လက်တွေ့ကျသော application အခြေအနေများ

  • hash_file () - လုပ်ငန်းများ၌ဖိုင်များသည်သေးငယ်သောအခါ system memory သည်လုံလောက်ပြီး system memory သည်လုံလောက်သည်။

  • Hash_Update_stream () - Memory-Limited Areature ပတ်ဝန်းကျင်တွင်သို့မဟုတ်မှတ်ဥာဏ်အကန့်အသတ်ရှိသောပတ်ဝန်းကျင်တွင်သို့မဟုတ် Memory-Limited Areathodical environments in hash_update_stream () တွင် ပိုမိုသင့်တော်သည်။

4 ။ စွမ်းဆောင်ရည်စမ်းသပ်ခြင်း

နှစ်ခုအကြားစွမ်းဆောင်ရည်ကွဲပြားခြားနားမှုများကိုထပ်မံအတည်ပြုရန်, ၎င်းတို့ကိုရိုးရှင်းသောကုဒ်အပိုင်းအစတစ်ခုဖြင့်စမ်းသပ်နိုင်သည်။

4.1 hash_file နှင့်အတူစမ်းသပ်ခြင်း ()

 $start = microtime(true);
$hash = hash_file('sha256', 'largefile.txt');
$end = microtime(true);
echo "hash_file took: " . ($end - $start) . " seconds.\n";

4.2 Hash_update_stream နှင့်အတူစမ်းသပ်ခြင်း ()

 $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 နှစ်ခုအပိုင်းပိုင်း၏ကွပ်မျက်မှုအချိန်ကိုနှိုင်းယှဉ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်နည်းစနစ်နှစ်ခုအကြားစွမ်းဆောင်ရည်ကွဲပြားခြားနားမှုများကိုအမှန်တကယ်နားလည်နိုင်သည်။

5 ။ အကျဉ်းချုပ်

  • အသေးစားနှင့်အလတ်စားဖိုင်များအတွက် Hash_File () သည်ရိုးရှင်းလွယ်ကူပြီးအသုံးပြုရလွယ်ကူပြီးပိုမိုမြန်ဆန်ပြီးလိုအပ်ရာအများစုနှင့်ကိုက်ညီရန်လုံလောက်သည်။

  • ကြီးမားသောဖိုင်များအတွက် Hash_update_stream () သည် မှတ်ဥာဏ်ကိုထိန်းချုပ်ရန်နှင့်မှတ်ဉာဏ်အကန့်အသတ်ရှိသောပတ်ဝန်းကျင်တွင်အသုံးပြုရန်သင့်တော်သည်။

မှန်ကန်သောဆေးထည့်သောနည်းလမ်းကိုရွေးချယ်ခြင်းသည်စွမ်းဆောင်ရည်ကိုတိုးတက်စေရုံသာမကအရင်းအမြစ်များကိုဖြုန်းတီးခြင်းကိုလည်းရှောင်ရှားနိုင်သည်။ ကြီးမားသောဖိုင်အမျိုးအစားအတွက် Hash_update_stream () ကို အသုံးပြုရန်အတွက်၎င်းကို Memory Footprint နှင့်ပိုမိုတည်ငြိမ်သောစွမ်းဆောင်ရည်ရှိသည်။