လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> hash_update ကိုအသုံးပြုသောအခါအာရုံစိုက်ရန်လိုအပ်သည့်မှတ်ဉာဏ်ကန့်သတ်ချက်ပြ issues နာများကို

hash_update ကိုအသုံးပြုသောအခါအာရုံစိုက်ရန်လိုအပ်သည့်မှတ်ဉာဏ်ကန့်သတ်ချက်ပြ issues နာများကို

gitbox 2025-05-26

Hash_update () function သည် PHP ကို ​​data encryption, signater or hash တွက်ချက်မှုများအတွက် PHP ကိုအသုံးပြုသောအခါအထူးသဖြင့်ဖိုင်ကြီးများသို့မဟုတ်ဒေတာစီးဆင်းမှုများကိုကိုင်တွယ်သောအခါ။ ဤလုပ်ဆောင်မှုသည်အချက်အလက်အားလုံးကိုတစ်ပြိုင်နက်တည်းတင်မည့်အစား hash context သို့ "feed" data text ကိုခြေလှမ်းတစ်လျှောက်လှည့်ပတ်ရန်ခွင့်ပြုသည်။ ဤနည်းလမ်းသည်မှတ်ဥာဏ်ပိုမိုဖော်ရွေသည်။ သို့သော် PHP ၏မှတ်ဉာဏ်ကန့်သတ်ချက် (Memory_Limit) ကြောင့်ဖြစ်ပေါ်လာသောပြ problems နာများရှိသေးသည်။

Hash_update () ကဘာလဲ။

Hash_update () သည် apimental hashing အတွက်အသုံးပြုသော API ၏တစ်စိတ်တစ်ပိုင်းဖြစ်သည်။ ၎င်းကို hash_init () နှင့် hash_final () ဖြင့်အသုံးပြုလေ့ရှိသည်။ ၎င်းသည်သင့်အားဒေတာများကိုဖျက်ရန်ခွင့်ပြုသည်။ ၎င်းသည် Memory ထဲသို့မ 0 င်နိုင်သည့်ကြီးမားသောဖိုင်များအတွက်အလွန်အရေးကြီးသည်။ ဥပမာအားဖြင့်:

 $context = hash_init('sha256');
$handle = fopen('largefile.dat', 'rb');
while (!feof($handle)) {
    $chunk = fread($handle, 8192);
    hash_update($context, $chunk);
}
fclose($handle);
$finalHash = hash_final($context);

ဒီဥပမာမှာ Hash တွက်ချက်မှုအတွက် 8KB ကိုဖတ်တဲ့ဖိုင်ကြီးတစ်ခုနဲ့ကျွန်တော်တို့ဆက်ဆံနေတယ်။

ဖြစ်နိုင်သောမှတ်ဉာဏ်ကန့်သတ်ပြ problems နာများ

Hash_Update () သည် Memory-Saving ဖြစ်သော်လည်းအမှန်တကယ်အသုံးပြုမှုတွင်ပါ 0 င်သော PHP Configuration ၏မှတ်ဉာဏ်ကန့်သတ်ချက်များကြောင့်ပြ problems နာအချို့ကိုဖြစ်ပေါ်နိုင်ဆဲဖြစ်သည်။

1 ။ စာဖတ်ခြင်းနည်းလမ်းသည်မမှန်ကန်ပါ။ မှတ်ဉာဏ်များလွန်းသည်

ဖိုင်တစ်ခုလုံးကို memory ထဲသို့မှားယွင်းစွာဖွင့်ပြီး hash_update () ကို ခေါ်ပါ။

 $data = file_get_contents('largefile.dat'); // မှတ်ဉာဏ်တွေအများကြီးတက်ယူ
hash_update($context, $data);

၎င်းသည်ဖိုင်တစ်ခုလုံးကိုတစ်ချိန်တည်းတွင်မှတ်ဉာဏ်သို့စာဖတ်ခြင်းကိုဖတ်ရန်ဖြစ်စေလိမ့်မည်။ အကယ်. ဖိုင်သည် (ထိုကဲ့သို့သော GB ကဲ့သို့သော) သည်ကြီးမားသည်ဆိုပါက၎င်းသည် default memory_Limit ထက်ကျော်လွန်ပြီး script ကို crash လုပ်ရန်ဖြစ်သည်။

2 ။ သွယ်ဝိုက်သောကြားခံသည်မှတ်ဥာဏ်စုဆောင်းခြင်းကိုဖြစ်ပေါ်စေသည်

အပြောင်းအလဲများကိုထုတ်လွှင့်သည့်အခါအရင်းအမြစ်များကိုအချိန်မီမထုတ်ပြန်ပါကသို့မဟုတ်စာဖတ်ခြင်းပိတ်ပင်တားဆီးမှုသည်ကြီးမားလွန်းပါက၎င်းသည်မှတ်ဥာဏ်သုံးစွဲမှုစုဆောင်းခြင်းကိုအထူးသဖြင့်ဖိုင်များစွာကိုလုပ်ဆောင်ခြင်းသို့မဟုတ်ဒေတာအမြောက်အများကိုလုပ်ဆောင်ခြင်းသံသရာများပြုလုပ်သောအခါ။

3. တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများတွင်မှတ်ဉာဏ်ဖိအားတိုးလာသည်

တစ်ပြိုင်နက်တည်းတစ်ပြိုင်နက်တည်းဖြစ်စဉ်များတွင် PHP လုပ်ငန်းစဉ်များစွာကိုတစ်ပြိုင်နက်တည်းတွင်တစ်ပြိုင်နက်တည်းကြုံတွေ့ရပြီး memory purpose ခြုံငုံသည်စနစ်၏စွမ်းဆောင်ရည်ပျက်စီးခြင်းသို့မဟုတ်ပျက်ကျမှုဖြစ်နိုင်သည်။

ဤပြ problems နာများကိုမည်သို့ရှောင်ရှားနိုင်မည်နည်း။

1 ။ အချက်အလက်များကိုဖတ်ရန် streaming ကိုသုံးပါ

block အရွယ်အစားထိန်းချုပ်မှုနှင့်အတူပေါင်းစပ် () သို့မဟုတ် stream_get_contents () ကို အသုံးပြုလိုသည် () ကို အသုံးပြု. ဖိုင်တစ်ခုလုံးကိုတစ်ပြိုင်တည်းမတင်ပါနှင့်။ ဖိုင်များ, socket များနှင့်အခြားအရင်းအမြစ်များအတွက်သင့်တော်သည်။

 $handle = fopen('https://gitbox.net/files/bigfile.zip', 'rb');
while (!feof($handle)) {
    $chunk = fread($handle, 4096); // ထိန်းချုပ်မှုမှတ်ဉာဏ်အသုံးပြုမှု
    hash_update($context, $chunk);
}
fclose($handle);

2 ။ memory_limit ကို ချိန်ညှိပါ

Memory_LIMIT သည်အမှန်တကယ်စီးပွားရေးလိုအပ်ချက်များနှင့်အညီသင့်လျော်စွာတိုးပွားလာသည်။ php.ini , hehtaccess သို့မဟုတ် code တွင်သတ်မှတ်နိုင်သည်။

 ini_set('memory_limit', '512M');

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

3 ။ အသုံးမပြုရသေးသောအရင်းအမြစ်များကိုရှင်းလင်းပါ

ဖိုင်လက်ကိုင်ကိုပိတ်ခြင်းနှင့် variable ကိုးကားဖြန့်ချိမှုများကိုပြန်လည်ထုတ်လွှင့်ခြင်းသည်မှတ်ဉာဏ်အသုံးပြုမှုကိုလျှော့ချနိုင်သည်။ မလိုအပ်တော့သည့် variable များကိုတက်ကြွစွာဖျက်ဆီးရန် unset () ကို သုံးပါ။

4 ။ စောင့်ကြည့်လေ့လာခြင်းနှင့်မှတ်တမ်းခွဲခြမ်းစိတ်ဖြာခြင်း

မှတ်ဉာဏ်အသုံးပြုမှုစောင့်ကြည့်လေ့လာရေးကိရိယာများကိုမိတ်ဆက်ပေးရန်သို့မဟုတ်မှတ်ဉာဏ်ခြွင်းချက်များကိုအချိန်မီရှာဖွေတွေ့ရှိရန်မှတ်တမ်းများကိုပုံမှန်ကြည့်ပါ။ ဥပမာအားဖြင့်, memorom_get_usage () ကိုခေါ်ဆိုပါ။

 echo "Memory usage: " . memory_get_usage(true) . " bytes\n";

5 ။ ကြီးမားသော hash အလုပ်များကိုကိုင်တွယ်ရန်ဝက်ဘ်ပတ်ဝန်းကျင်အစား PHP CLI ကိုသုံးပါ

command line ပတ် 0 န်းကျင်သည်အချို့သောဝက်ဘ်ကန့်သတ်ချက်များ (တစ်ပြိုင်နက်တည်းတောင်းဆိုမှုများကြောင့်ဖြစ်ပေါ်လာသောဖိအားများကဲ့သို့) အချို့သောဝက်ဘ်ကန့်သတ်ချက်များကိုရှောင်ရှားနိုင်ပြီးနောက်ခံသုတ်သင်ခြင်းအတွက်သင့်လျော်သည်။

 php hash_large_file.php

ကောက်ချက်

Hash_Update () သည် အချက်အလက်အမြောက်အများကိုပြုပြင်ရန်အတွက်လှပသော incremental hashing method ကိုပေးသည်။ သို့သော်သင်အသုံးပြုမှုနှင့်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုကိုသင်ဂရုမစိုက်ပါက၎င်းသည်မှတ်ဥာဏ်ကန့်သတ်ချက်များကြောင့်ပြ problems နာများဖြစ်ပေါ်စေနိုင်သည်။ streaming confircation, အရင်းအမြစ်များကိုအချိန်မီဖြန့်ချိခြင်း, အရင်းအမြစ်များကိုအချိန်မီထုတ်ပြန်ခြင်းကိုအသုံးပြုခြင်းဖြင့်ကျွန်ုပ်တို့သည်ဆက်စပ်သောအန္တရာယ်များကိုထိရောက်စွာရှောင်ရှားနိုင်ပြီးစနစ်တည်ငြိမ်မှုနှင့်စွမ်းဆောင်ရည်ကိုထိရောက်စွာရှောင်ရှားနိုင်သည်။ https://gitbox.net ကဲ့သို့သောဝေးလံသောအရင်းအမြစ်များမှဖိုင်များကိုလုပ်ဆောင်သည့်အခါကွန်ယက်စီးဆင်းမှုနှင့်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုအကြားညှိနှိုင်းဆောင်ရွက်မှုကိုပိုမိုအာရုံစိုက်ရန်လိုအပ်ပြီးလုံခြုံရေးနှင့်ထိရောက်မှုကိုသေချာစေရန်သင်ပိုမိုအာရုံစိုက်ရန်လိုအပ်သည်။