PHP တွင်ကြီးမားသောဖိုင်များကိုလုပ်ဆောင်သောအခါအလွန်အကျွံမှတ်ဉာဏ်အသုံးပြုမှုပြ the နာကိုကျွန်ုပ်တို့မကြာခဏရင်ဆိုင်ရလေ့ရှိသည်။ အထူးသဖြင့်ဖိုင်တစ်ခု၏ hash တန်ဖိုးကို (ဥပမာ - MD5, Sha1 စသည်) ကိုတွက်ချက်ရန်လိုအပ်ပါကဖိုင်တစ်ခုလုံးကိုတစ်ချိန်တည်းတွင်မှတ်ဉာဏ်ထဲသို့ 0 င်ပါကမှတ်ဉာဏ်အကန့်အသတ်ဖြင့်ဖြစ်ပေါ်စေနိုင်သည်, ဤသို့ရှောင်ရှားရန် PHP သည် hash_update_stream function ကိုထောက်ပံ့ပေးသည်။
Hash_update_stream သည် hash တွက်ချက်မှုများကိုမွမ်းမံရန်အတွက် PHP တွင်လုပ်ဆောင်ချက်တစ်ခုဖြစ်သည်။ ၎င်းသည် Open file stream (stream) ကိုလက်ခံပြီးဖိုင်ပါ 0 င်သည့် contents ပိတ်ဆို့ခြင်းကိုပိတ်ပင်တားဆီးမှုဖြင့်ပြုလုပ်ထားသော hash ကိုအသစ်ပြောင်းသည်။ Loading File Contents ကို Memory သို့တိုက်ရိုက်တိုက်ရိုက်နှိုင်းယှဉ်ခြင်းနှင့်နှိုင်းယှဉ်လျှင် hash_update_stream သည် ကြီးမားသောဖိုင်များကိုအဆင့်ဆင့်အဆင့်ဆင့်လုပ်ဆောင်နိုင်ပြီးမှတ်ဉာဏ်ခြေရာကိုသိသိသာသာလျှော့ချနိုင်သည်။
function ကိုလက်မှတ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
bool hash_update_stream ( resource $context , resource $file_handle [, int $length = 1024 ] )
$ Context : ဤသည် hash_init function မှဖန်တီးထားသော hash အခြေအနေ။
$ file_handle - ဖိုင်၏အရင်းအမြစ်လက်ကိုင်ကိုများသောအားဖြင့် fopen function မှတဆင့်ရရှိသော။
$ အရှည် - အချိန်ကိုဖတ်နေ Bytes အရေအတွက်ကိုဖတ်ပါ, ပုံမှန်အားဖြင့် 1024 bytes (1kb) ဖြစ်သည်။
ကျွန်ုပ်တို့တွင်ဖိုင်ကြီးကြီးတစ်ခုရှိပြီး MD5 hash ကိုတွက်ချက်ရန်လိုအပ်သည်ဆိုပါစို့။ ရိုးရာချဉ်းကပ်နည်းသည်ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့ဖတ်ရန်နှင့် hash တန်ဖိုးကိုတွက်ချက်ရန်ဖြစ်သည်။ သို့သော်ကြီးမားသောဖိုင်များအတွက်ဤအလေ့အကျင့်သည်မှတ်ဥာဏ်လျှံသို့ ဦး တည်နိုင်သည်။
$file = 'path/to/largefile.txt'; // အမှန်တကယ်ဖိုင်လမ်းကြောင်းနှင့်အစားထိုးလိုက်ပါ
$context = hash_init('md5');
$handle = fopen($file, 'rb');
if ($handle) {
while (!feof($handle)) {
$buffer = fread($handle, 1024); // ဖတ်1KBအချက်များ
hash_update($context, $buffer);
}
fclose($handle);
}
$hash = hash_final($context);
echo "File MD5 hash: " . $hash;
အပေါ်ကပြထားတဲ့အတိုင်းဖိုင်ကို funks ထဲမှာဖတ်ပြီး hash_update သုံးပြီး hash value ကို update လုပ်တယ်။ ဤနေရာတွင် hash_update ကို သေးငယ်သောလုပ်ကွက်များအတွက်တွက်ချက်သည်။ သို့သော်မှတ်ဉာဏ်အသုံးပြုမှုကိုပိတ်ပင်တားဆီးမှုအရွယ်အစားပေါ် မူတည်. ဆုံးဖြတ်သည်။
hash_update ကို တိုက်ရိုက်အသုံးပြုခြင်းနှင့်မတူဘဲ hash_update_stream function သည်ဖိုင်များကိုလက်ဖြင့်ဖတ်ခြင်းမရှိဘဲဖိုင်စီးဆင်းမှုများကိုတိုက်ရိုက်လုပ်ဆောင်ရန်ခွင့်ပြုသည်။
အကောင်းဆုံးကုဒ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
$file = 'path/to/largefile.txt'; // အမှန်တကယ်ဖိုင်လမ်းကြောင်းနှင့်အစားထိုးလိုက်ပါ
$context = hash_init('md5');
$handle = fopen($file, 'rb');
if ($handle) {
while (!feof($handle)) {
// 每次从文件流中ဖတ်1024bytes နှင့် update ကို hash
hash_update_stream($context, $handle, 1024);
}
fclose($handle);
}
$hash = hash_final($context);
echo "File MD5 hash: " . $hash;
Hash_update_stream ၏အားသာချက်မှာဖိုင်အပိုင်းတိုင်းကိုလက်ဖြင့်ဖတ်ခြင်းမရှိဘဲဖိုင်စီးကိုတိုက်ရိုက်ကိုင်တွယ်နိုင်သည်။ ဤနည်းလမ်းသည် hash တန်ဖိုးများကိုတွက်ချက်သောအခါအစီအစဉ်ကိုမှတ်ဉာဏ်အသုံးပြုမှုကိုထိရောက်စွာလျှော့ချရန်ခွင့်ပြုသည်။
block by block by block : Hash_update_stream သည် ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့တင်ရန်အစားဖိုင်ပိတ်ပင်တားဆီးမှုမှအချက်အလက်များကိုပိတ်ဆို့ခြင်းဖြင့်အချက်အလက်များကိုပိတ်ပင်တားဆီးမှုဖြင့်ဖတ်လိမ့်မည်။
Memory စားသုံးမှုနိမ့်ခြင်း - streaming operations မှတစ်ဆင့်မှတ်ဉာဏ်ခြေရာသည်အလွန်နိမ့်ပြီးလက်ရှိလုပ်ဆောင်နေသောဖိုင်လုပ်ကွက်များကိုသာသိမ်းဆည်းရန်လိုအပ်သည်။
ကြီးမားသောဖိုင်များအတွက်သင့်တော်သည် ။ အလွန်ကြီးမားသောဖိုင်များ (ဥပမာ, GB သို့မဟုတ်ပိုကြီးသော) အတွက်အလွန်ကြီးမားသောဖိုင်များအတွက် hash_update_stream သည်အကောင်းဆုံးဖြစ်သည်။
လက်တွေ့ကျသော application များအရဝေးလံသောဖိုင်၏ hash တန်ဖိုးကိုတွက်ချက်ရန်လိုအပ်သည့်အခြေအနေများကြုံတွေ့ရနိုင်သည်။ URL လိပ်စာတစ်ခုမှထောက်ပြထားသောဖိုင်၏ hash တန်ဖိုးကိုတွက်ချက်ရန်လိုသည်ဆိုပါစို့။
$url = 'http://example.com/largefile.txt'; // နမူနာ URL
$file = fopen($url, 'rb');
if ($file) {
$context = hash_init('md5');
while (!feof($file)) {
hash_update_stream($context, $file, 1024);
}
fclose($file);
$hash = hash_final($context);
echo "File MD5 hash: " . $hash;
}
သို့သော် URL domain name m66.net ကိုအစားထိုးရန်သင်တောင်းခံသောကြောင့်အထက်ပါ URL သို့ပြောင်းလဲနိုင်သည်။