hash_update ၏အသုံးပြုမှုမှာအောက်ပါအတိုင်းဖြစ်သည် -
$ctx = hash_init('sha256'); // Hash အခြေအနေကိုစတင်ပါ,အဆိုပါ algorithm ကိုသတ်မှတ်
hash_update($ctx, $dataChunk); // ဒေတာလုပ်ကွက်ဖြည့်စွက်
$hash = hash_final($ctx); // နောက်ဆုံး hash တန်ဖိုးကိုတွက်ချက်
ဤဖြစ်စဉ်သည်ကျွန်ုပ်တို့အား hash_update အကြိမ်ပေါင်းများစွာခေါ်ဆိုနိုင်ပြီးဒေတာ၏အစိတ်အပိုင်းတစ်ခုသို့ application နှင့်နောက်ဆုံးတွင် hash_final ကိုအချိန်ဖြည့်စွက်ရန် Hash_Final ကို အချိန်ယူရမည်ဟုခေါ်ပါ။
အမှားအယွင်းများစွာသည် 0 င်ရောက်လာသော $ datachunk encoding format ဖြင့်ဖြစ်ပေါ်လာသည်။ ဤကိစ္စတွင်, Hash ရလဒ်သည်ကိုက်ညီမှုမရှိပါကအချက်အလက်များ၏အမှန်တကယ် bytes နှင့်မကိုက်ညီသောကြောင့်ဖြစ်သည်။
ဥပမာ -
$data1 = "မင်္ဂလာပါ"; // UTF-8encoded ကြိုး
$data2 = mb_convert_encoding($data1, 'GBK'); // ကူးပြောင်းGBKကုဒ်
hash_update($ctx, $data1);
hash_update($ctx, $data2); // နှစ်ကြိမ်အတွင်းလွန်ကဲသောအချက်အလက်များ၏အမှန်တကယ် bytes ကွဲပြားခြားနားသည်,အဆိုပါ hash ရလဒ်မမှန်ကန်ပါ
ဖြေရှင်းချက် - ဒေတာအားလုံးကို encodages encodate လုပ်ပြီးစင်ကြယ်သော binary string ကိုဖြစ်စေ,
အကယ်. အတုံးကွက်များတွင်အချက်အလက်များကိုဖတ်ရှုသောအခါအော့ခန့်သောအမှားတစ်ခုသို့မဟုတ်အဓိပ္ပာယ်ကိုဖြစ်ပေါ်ပါက 0 င်ရောက်လာသည့်ပိတ်ပင်တားဆီးမှုသည်အချို့သော bytes သို့မဟုတ်မလိုအပ်သော bytes များဆုံးရှုံးနိုင်သည်။
ဥပမာအားဖြင့်, ဖိုင်ကိုဖတ်ရှုသည့်အခါမျှော်လင့်ထားသည့်အတိုင်းမပါဝင်ပါ။
while (!feof($fp)) {
$chunk = fread($fp, 1024);
hash_update($ctx, $chunk);
}
ပုံမှန်မဟုတ်သောစာဖတ်ခြင်းများကိုမသုံးပါကသို့မဟုတ်ကြားခံအရွယ်အစားကိုအလွဲသုံးစားပြုပါကဒေတာဆုံးရှုံးမှုပေါ်ပေါက်လာလိမ့်မည်။
ဖြေရှင်းချက် - အချိန်တစ်ခုစီတိုင်းကိုဖတ်ရှုနိုင်အောင်သေချာအောင်လုပ်ပါ။ စံဖိုင်ဖတ်ခြင်းနှင့်ရေးသားခြင်းလုပ်ငန်းစဉ်များကိုအသုံးပြုရန်အကြံပြုသည်။
အချို့သော developer များသည် loop အတွင်းရှိ hash_init ကို မှားယွင်းစွာခေါ်ဆိုသည်။
အမှားဥပမာ -
foreach ($dataChunks as $chunk) {
$ctx = hash_init('sha256'); // အမှား:ကွင်းတိုင်းကို reset
hash_update($ctx, $chunk);
}
$hash = hash_final($ctx);
ဤအချိန်တွင် $ CTX သည် နောက်ဆုံးပိတ်ပင်တားဆီးမှု၏ hash ကိုသာသိမ်းဆည်းသည်။
မှန်ကန်သောအရေးအသား -
$ctx = hash_init('sha256');
foreach ($dataChunks as $chunk) {
hash_update($ctx, $chunk);
}
$hash = hash_final($ctx);
အထက်ပါပြ issues နာများကိုအကျဉ်းချုပ်ဖော်ပြရန် Hash_Update ကို မှန်ကန်စွာအသုံးပြုခြင်းအတွက်အကြံပြုချက်များမှာအောက်ပါအတိုင်းဖြစ်သည် -
Unified Data Encoding : ဘာသာစကားမျိုးစုံအရင်းအမြစ်များကိုပြုပြင်သည့်အခါမမြင်ရသောဇာတ်ကောင်များကိုရှောင်ရှားရန်ဒေတာများကိုပထမဆုံး encoding (UTF-8) သို့ပြောင်းရန်သေချာအောင်လုပ်ပါ။
ကျိုးကြောင်းဆီလျော်သော chunking စာဖတ်ခြင်း - ဖိုင်များသို့မဟုတ်စီးဆင်းမှုများကိုဖတ်သည့်အခါအမှားများသို့မဟုတ်ပွားများကိုရှောင်ရှားရန်ပုံသေလုပ်ကွက်များကိုသုံးပါ။
အခြေအနေကိုတစ်ကြိမ်တည်းဖြင့်စတင်ပါ - ဒေတာများကိုမစတင်မှီ hash_init ကို ဖုန်းဆက်ပါ။
သင်တစ်စိတ်တစ်ပိုင်း hash ရလဒ်ကိုမရလိုလျှင် hash_final ကို အလယ်၌မခေါ်ပါနှင့် ။
အောက်ပါဥပမာသည် hash_update သုံး. ဖိုင်တစ်ခု၏ sha256 hash ကိုမည်သို့မှန်ကန်စွာတွက်ချက်ရမည်ကိုပြသသည်။
<?php
$filename = 'gitbox.net/path/to/yourfile.txt';
$ctx = hash_init('sha256');
$fp = fopen($filename, 'rb');
if (!$fp) {
die('ဖိုင်ကိုဖွင့ ်. မရပါ');
}
while (!feof($fp)) {
$chunk = fread($fp, 8192); // 8KBဖတ်နေပိတ်ပင်တားဆီးမှု
if ($chunk === false) {
fclose($fp);
die('读取စာချုပ်စာတမ်းအမှား');
}
hash_update($ctx, $chunk);
}
fclose($fp);
$hash = hash_final($ctx);
echo "စာချုပ်စာတမ်းSHA256hash တန်ဖိုး: " . $hash;
?>
ဤနည်းလမ်းမှာ -
ဖိုင်ကို encoding ပြောင်းလဲခြင်းကြောင့်ဖြစ်ပေါ်လာသော 0 င်ရောက်စွက်ဖက်မှုကိုရှောင်ရှားရန်ဖိုင်ကို binary safe mode တွင်ဖွင့်ထားသည်။
ပျက်ကွက်မှုမရှိဘဲသတ်မှတ်ထားသောအရွယ်အစားရှိဒေတာများကိုဖတ်ပါ။
Hash အခြေအနေကိုတစ်ကြိမ်သာအစပြုထားပြီးရလဒ်သည်တစ်ချိန်က output ကိုဖြစ်သည်။
Hash_update သည် PHP အတွက် Hash တွက်ချက်မှုများကိုပြုလုပ်ရန်အတွက်အရေးကြီးသောလုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ သို့သော်ဒေတာအရှည်သို့မဟုတ် encoding သည်ကိုက်ညီမှုမရှိပါက၎င်းသည်နောက်ဆုံး hash အမှားတစ်ခုဖြစ်ပေါ်စေလိမ့်မည်။ သင် encoding သည်ယူနီဖောင်းနေကြောင်းသေချာသရွေ့အချက်အလက်များသည်မှန်ကန်စွာ chunked လုပ်ပြီး hash အခြေအနေကိုတစ်ကြိမ်သာတွေ့ရှိရသည်။ အများအားဖြင့်ပြ problems နာများကိုရှောင်ရှားနိုင်သည်။
သင် Hash ရလဒ် မှလွဲ. သင်ကြုံတွေ့ရပါက ကျေးဇူးပြု. ၎င်းကိုပထမဆုံးစစ်ဆေးပါ။
ဒေတာကိုပြုပြင်မွမ်းမံခြင်းသို့မဟုတ်ဖြတ်ခြင်းရှိမရှိ
encoding ကိုက်ညီပါသလား?
အဆိုပါ hash အခြေအနေအမှားအားဖြင့် reset ဖြစ်ပါတယ်
ငါချောမွေ့သောဖွံ့ဖြိုးတိုးတက်မှုနှင့်မှန်ကန်သော hash တွက်ချက်မှုအလိုရှိ၏!