PHP ၏စွမ်းဆောင်ရည်သည်ကြီးမားသောဖိုင်များနှင့်ဆက်ဆံရာတွင်အထူးသဖြင့်ဖိုင်၏ hash တန်ဖိုးကိုတွက်ချက်ရန်လိုအပ်သည့်အခါအရေးကြီးသောထည့်သွင်းစဉ်းစားခြင်းဖြစ်သည်။ များသောအားဖြင့် File Hash Values (ဥပမာ MD5 သို့မဟုတ် Sha-256 ကဲ့သို့သော MD5 သို့မဟုတ် Sha-256) ကိုတွက်ချက်ခြင်းသည်အထူးသဖြင့်ဖိုင်များကြီးမားသည့်အခါအချိန်များစွာယူနိုင်သည်။ PHP တွင် hash_final function သည် hash တွက်ချက်မှုများကိုပြီးစီးရန်အသုံးပြုသောသော့ချက်ဖြစ်သည်။ ကြီးမားသောဖိုင်များပြုပြင်သည့်အခါစွမ်းဆောင်ရည်ကိုတိုးတက်စေနိုင်သည်။ ထို့နောက်ကျွန်ုပ်တို့သည် hash_final function ကိုအသုံးပြုနည်းနှင့်ကြီးမားသောဖိုင်များပြုပြင်သည့်အခါကြီးမားသောဖိုင်များပြုပြင်ခြင်းအတွက်စွမ်းဆောင်ရည်တိုးတက်စေရန်ဥပမာအချို့ကိုအသုံးပြုရမည်။
PHP ၏ hash_final function သည် hash အခြေအနေ၏နောက်ဆုံးတွက်ချက်မှုဖြစ်သည်။ ၎င်း၏ရည်ရွယ်ချက်မှာဒေတာများကို hashing algorithm သို့ သွား. နောက်ဆုံး hash တန်ဖိုးကိုပြန်ပေးရန်ဖြစ်သည်။ ယေဘုယျအားဖြင့် hash_final ကို hash computing ၏ပြီးပြည့်စုံသောလုပ်ငန်းစဉ်ကိုဖွဲ့စည်းရန် Hash_init နှင့် hash_update တို့ဖြင့်အသုံးပြုသည်။
Hash_init () - hash အခြေအနေကိုစတင်သည်။
Hash_update () - hash context ကို update လုပ်ပြီးဒေတာခြေလှမ်းကိုအဆင့်ဆင့်ထည့်ပါ။
Hash_final () : နောက်ဆုံး hash value ကိုပြန်ပို့ပြီး hash အခြေအနေကိုထုတ်ပြန်ခဲ့သည်။
ဤလုပ်ငန်းဆောင်တာများပေါင်းစပ်ခြင်းများသည်ကြီးမားသောဖိုင်များကိုပြန်လည်ပြုပြင်ခြင်းအတွက်အလွန်အသုံးဝင်သည်။
Hash_init , hash_update နှင့် hash_finals သုံး. ကြီးမားသောဖိုင်များအတွက် Hash တန်ဖိုးများကိုမည်သို့တွက်ချက်ရမည်ကိုဖော်ပြသည့်အခြေခံဥပမာတစ်ခုမှာ။
<?php
// ဖိုင်လမ်းကြောင်းကိုသတ်မှတ်ပါ
$filePath = 'path/to/large/file.zip'; // ကျေးဇူးပြု. ဤနေရာတွင်အမှန်တကယ်ကြီးမားသောဖိုင်လမ်းကြောင်းသို့သွားရန်ပြင်ဆင်ပါ
// Hash အခြေအနေကိုစတင်ပါ
$hashContext = hash_init('sha256'); // အသုံးပြုSHA-256hash algorithm
// စာဖတ်ခြင်းအတွက်ဖိုင်ကိုဖွင့်ပါ
$handle = fopen($filePath, 'rb');
if ($handle === false) {
die('ဖိုင်ကိုဖွင့ ်. မရပါ!');
}
// ဖိုင်များကိုပိတ်ပင်တားဆီးမှုဖြင့်ဖတ်ပါ
while (!feof($handle)) {
$chunk = fread($handle, 8192); // တစ်ခုချင်းစီကိုဖတ်ပါ8KB
hash_update($hashContext, $chunk); // Hash အခြေအနေကို Update လုပ်ပါ
}
// ဖိုင်လက်ကိုင်ကိုပိတ်ပါ
fclose($handle);
// နောက်ဆုံး hash တန်ဖိုးကိုရယူပါ
$hashValue = hash_final($hashContext);
// output ကို hash တန်ဖိုး
echo "ဖိုင်၏ hash တန်ဖိုးဖြစ်ပါတယ်:$hashValue\n";
?>
Hash အခြေအနေကိုစတင်ပါ - Sha-256 ၏ hash အခြေအနေကိုစတင်ရန် Hash_init function ကိုကျွန်ုပ်တို့အသုံးပြုသည်။ MD5 , Sha1 စသည့်အခြား algorithms များကိုလည်းသင်ရွေးချယ်နိုင်သည်။
blocks in file ကိုဖတ်ပါ ။ File contents တွေကို အရူးအမူး function မှတဆင့်လုပ်ကွက်များဖြင့်ဖတ်ပါ။ 8KB ကိုတိုင်းဖတ်ပါ။ ပိတ်ပင်တားဆီးမှုအရွယ်အစားလိုအပ်သကဲ့သို့အရွယ်အစားနိုင်ပါတယ်။ ပိုကြီးတဲ့ဖိုင်လုပ်ကွက်တွေဟာ function ခေါ်ဆိုမှုအရေအတွက်ကိုလျှော့ချပေးမှာပါ,
Update ကို Hash Context : ဒေတာအပိုင်းအစတစ်ခုဖတ်သည့်အခါတိုင်းဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်သို့မပို့စေရန် hash အခြေအနေကို update လုပ်ရန်အသုံးပြုသည်။
နောက်ဆုံး HALH တန်ဖိုးကိုရယူပါ ။ ဖိုင်ကိုဖတ်ပြီးပါကနောက်ဆုံး hash တန်ဖိုးနှင့် output ကိုရရှိရန် hash_final function ကိုသုံးပါ။
ဖိုင်များကိုပိတ်ပင်တားဆီးမှုဖြင့်ဖတ်ပါ ။ ကြီးမားသောဖိုင်များအတွက်ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့မတင်ပါနှင့်။ Hash တန်ဖိုးများကိုပိတ်ဆို့ခြင်းနှင့်မွမ်းမံခြင်းဖြင့်ဖိုင်များကိုဖတ်ရှုခြင်းအားဖြင့်မှတ်ဥာဏ်အသုံးပြုမှုကိုသိသိသာသာလျှော့ချနိုင်ပြီးမြန်နှုန်းတိုးတက်လာနိုင်သည်။
မှန်ကန်သောဆေးထည့်သော algorithm ကိုရွေးချယ်ပါ ။ မတူညီသော hashing algorithms သည်စွမ်းဆောင်ရည်တွင်ကွဲပြားသည်။ MD5 သည်များသောအားဖြင့်ပိုမိုမြန်ဆန်သည်, Sha-256 သည်ပိုမိုမြန်ဆန်သည်, ကြီးမားသောဖိုင်များနှင့်အလုပ်လုပ်သောအခါသင့်တော်သော hashing algorithm ကိုရွေးချယ်ခြင်းသည်စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်အောင်ပြုလုပ်နိုင်သည်။
File Flow Optimization - ဖြစ်နိုင်လျှင်ကျွန်ုပ် / o စစ်ဆင်ရေးများတွင် latence ကိုလျှော့ချရန် Memory Mapped Files ( fop mode) ကို သုံးပါ။
Parallelation processing : အလွန်ကြီးမားသောဖိုင်များအတွက်ဖိုင်များကိုလုပ်ကွက်များသို့ခွဲရန်, လုပ်ငန်းစဉ်များသို့မဟုတ်ချည်များ သုံး. hash ကို called လုပ်ရန်အပြိုင်အဆိုင်နည်းပညာကိုသုံးပြီးရလဒ်များကိုပေါင်းစပ်ပါ။
သင့်တွင်အချက်အလက်အမြောက်အများရှိသောဖိုင်တစ်ခုရှိပြီးဤဖိုင်၏ Sha-256 hash တန်ဖိုးကိုတွက်ချက်ရန်နှင့်ဖိုင်တွဲများကိုတွက်ချက်ရန်သို့မဟုတ်တွက်ချက်မှုအပြီးဆာဗာသို့သူတို့ကိုတင်ပါ။ ဤလုပ်ငန်းစဉ်တွင် Hash_Final function သည်မှတ်ဥာဏ်လျှံလျှံလျှံလျှံလျှံလျှံကိုပိုမိုရှောင်ရှားနိုင်သည်။
ဖိုင်များကိုတင်သည့်အခါဖိုင်၏ hash တန်ဖိုးကိုများသောအားဖြင့်ဖိုင်သမာဓိကိုစစ်ဆေးရန်ဖြစ်သည်။
<?php
// နမူနာURL - ဖိုင်တင်ပါ时အသုံးပြု哈希值进行验证
$uploadUrl = 'https://gitbox.net/upload_file';
// ဖိုင်၏ hash တန်ဖိုးကိုတွက်ချက်ထားကြောင်းယူဆ
$hashValue = 'တွက်ချက်ထားသောဖိုင် hash တန်ဖိုး';
// ဖိုင်တင်ပါ
$data = array('file_hash' => $hashValue);
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => http_build_query($data)
)
);
$context = stream_context_create($options);
$result = file_get_contents($uploadUrl, false, $context);
echo $result;
?>
ဤဥပမာတွင်ကျွန်ုပ်တို့သည်လွှဲပြောင်းမှုကာလအတွင်းဖိုင်ကိုအနှောင့်အယှက်မပေးရန်အတွက်သတ်မှတ်ထားသော server (ဤကိစ္စတွင် gitbox.net တွင်) သတ်မှတ်ထားသော server (ဤကိစ္စတွင် gitbox.net တွင် ) မှတွက်ချက်ထားသည့် hash value ကိုပေးပို့နိုင်သည်။