ဖိုင်အချို့တင်ဆွဲထားသည့်အခါအော့ဖ်လိုင်းသည်ဖိုင်တစ်ခုလုံးကိုအပြည့်အဝတင်ရန်စောင့်ဆိုင်းခြင်းမရှိဘဲတစ် ဦး ကိုတင်ရန်မစောင့်ရန်ဖိုင်တစ်ခုလုံးကိုတင်ရန်ခွင့်ပြုသည့်အသုံးများသောလုပ်ထုံးလုပ်နည်းတစ်မျိုးဖြစ်သည်။ တစ်ချိန်တည်းမှာပင်ထုတ်လွှင့်သည့်ဖိုင်ကိုထုတ်လွှင့်ခြင်းလုပ်ငန်းစဉ်အတွင်းတင်ထားသောဖိုင်ကိုအနှောင့်အယှက်ပေးရန်သေချာစေရန်အတွက် hash algorithm သည်များသောအားဖြင့်ဖိုင်၏သမာဓိကိုစစ်ဆေးရန်အသုံးပြုလေ့ရှိသည်။ Segmented hash upload ကိုအကောင်အထည်ဖော်ရန်ကူညီနိုင်သည့် PHP သည် hash_update_stream function ကိုထောက်ပံ့ပေးသည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်ချက်ကိုအကောင်အထည်ဖော်ရန် Hash_update_stream function ကိုမည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ဖော်ပြထားသည်။
hash_update_stream function သည် PHP တွင် hash function ဖြစ်သည်။ ၎င်းသည် (ဖိုင်, ဒေတာစီးစသည့်စသဖြင့်) တွင်စီးဆင်းနေသော PHP တွင်ပါ 0 င်သည်။ Segmented upload မြင်ကွင်းတွင်ဖိုင်ပိတ်ပင်တားဆီးမှုတင်ထားသည့်အခါတိုင်းဤ function ကို hash value ကို update လုပ်ရန်ခေါ်ယူနိုင်ပါသည်။
function ရှေ့ပြေးပုံစံ:
bool hash_update_stream ( resource $context , resource $handle [, int $length = 8192 ] )
$ Context : များသောအားဖြင့် hash_init function မှတဆင့်ဖန်တီးလေ့ရှိပြီး hash အခြေအနေကိုသတ်မှတ်သည်။
$ လက်ကိုင် - ပွင့်လင်းဖိုင်သို့မဟုတ်ဒေတာစီးဆင်းမှုကိုညွှန်ပြသည့်အရင်းအမြစ်။
$ အရှည် - default ဖတ်ရှုသည့် Bytes အရေအတွက်မှာ 8192 bytes ဖြစ်သည်။
ကျွန်ုပ်တို့တွင် segments များတွင်တင်ရန်လိုအပ်သည့်ပိုကြီးသောဖိုင်ရှိသည်ဆိုပါစို့။ Segmented hash upload ကိုအောက်ပါအတိုင်းအကောင်အထည်ဖော်နိုင်သည်။
ပထမ ဦး စွာ hash context ကိုဖန်တီးပြီးတွက်ချက်မှုအတွက် hash algorithm ကိုရွေးချယ်ပါ။
$hashContext = hash_init('sha256');
ထို့နောက်ကျွန်ုပ်တို့သည်ဖိုင်စီးဆင်းမှုကိုဖွင့ ်. segments file ၏ contents များကို upload လုပ်ပါ။ ဖိုင်ပိတ်ပင်တားဆီးမှုတင်ထားသည့်အခါတိုင်း hash တန်ဖိုးကို update လုပ်ရန် hash_update_stream function ကိုကျွန်ုပ်တို့ခေါ်ဆိုသည်။
$filePath = 'path/to/largefile.zip'; // ဖိုင်လမ်းကြောင်း
$chunkSize = 8192; // ဖတ်နှုန်းအရွယ်အစားကိုပိတ်ပင်တားဆီးမှု
$fileHandle = fopen($filePath, 'rb'); // ဖိုင်စီးကိုဖွင့်ပါ
if (!$fileHandle) {
die('ဖိုင်ကိုဖွင့ ်. မရပါ');
}
while (!feof($fileHandle)) {
// ဖိုင်စီးမှပိတ်ပင်တားဆီးမှုတစ်ခုကိုဖတ်ပါ
$chunk = fread($fileHandle, $chunkSize);
// Hash တန်ဖိုးကို Update လုပ်ပါ
hash_update_stream($hashContext, $chunk);
// ဖိုင်လုပ်ကွက်များကိုဤနေရာတွင်တင်ပါ
// သင်တစ် ဦး ချင်းစီပိတ်ပင်တားဆီးမှုတစ်ခုချင်းစီကို upload တင်ရန် upload function တစ်ခုရှိသည်ဆိုပါစို့
// upload_chunk($chunk);
}
// ဖိုင်စီးကိုပိတ်ပါ
fclose($fileHandle);
ဖိုင်၏လုပ်ကွက်များအားလုံးကို upload လုပ်ပြီးလုပ်ဆောင်ပြီးနောက်နောက်ဆုံး hash တန်ဖိုးကိုရရှိရန် hash_final function ကိုသုံးနိုင်သည်။
$finalHash = hash_final($hashContext);
echo "ဖိုင်၏ hash တန်ဖိုးဖြစ်ပါတယ်:$finalHash";
ဤနည်းအားဖြင့်ဖိုင်တွဲတစ်ခုစီသည်မှန်ကန်စွာ hashed နှင့်နောက်ဆုံးတွင်ဖိုင်တစ်ခုလုံး၏ hash တန်ဖိုးကိုရရန်သေချာစေနိုင်သည်။
Segmented upload လုပ်ငန်းစဉ်အတွင်း client သည်ဖိုင်ပိတ်ပင်တားဆီးမှုတစ်ခုတင်သည့်အခါတိုင်း၎င်းသည်သက်ဆိုင်ရာ hash value (သို့မဟုတ်ဖိုင်တစ်ခုလုံး၏ hash val) ကိုဆာဗာသို့ပေးပို့နိုင်သည်။
ဆာဗာဘေးထွက်စစ်ဆေးခြင်းလုပ်ငန်းစဉ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
// client ကိုမှတင်ထားသော hash တန်ဖိုးကိုလက်ခံရရှိသည်ဟုယူဆပါ
$receivedHash = $_POST['file_hash'];
// ဆာဗာဘက်မှာ hash ကိုပြန်လည်တွက်ချက်ပါ
$serverHashContext = hash_init('sha256');
$fileHandle = fopen('path/to/uploaded_chunk', 'rb'); // တင်ထားသောဖိုင်ပိတ်ပင်တားဆီးမှုကိုဖွင့်ပါ
while (!feof($fileHandle)) {
$chunk = fread($fileHandle, 8192);
hash_update_stream($serverHashContext, $chunk);
}
$calculatedHash = hash_final($serverHashContext);
// hash တန်ဖိုးကိုစစ်ဆေးပါ
if ($calculatedHash === $receivedHash) {
echo 'File Block Hash စိစစ်အတည်ပြု';
} else {
echo 'File Block Hash Verification မအောင်မြင်ပါ';
}
fclose($fileHandle);
Segmented hash upload ကိုအကောင်အထည်ဖော်ရန် hash_update_stream function ကိုအသုံးပြုခြင်းသည်လွယ်ကူပြီးထိရောက်သောနည်းလမ်းတစ်ခုဖြစ်သည်။ အထက်ပါအဆင့်များမှတစ်ဆင့်ကျွန်ုပ်တို့သည်ဖိုင်များကို segments များမှ upload လုပ်ပြီးတင်ထားသောဒေတာများကိုအနှောင့်အယှက်မပေးရန်သေချာစေရန် segments များကို segments များရှိဖိုင်ကိုတင်နိုင်သည်။ ၎င်းကိုတင်ပါလုပ်ငန်းစဉ်အတွင်းဖိုင်၏ block တစ်ခုစီကိုမှန်ကန်သောအစီအစဉ်အတိုင်းတင်ရန်သေချာစေရန်ဆာဗာသည်သက်ဆိုင်ရာ hash verification ပြုလုပ်ရန်လိုအပ်သည်။
အထက်ဖော်ပြပါအချက်သည် Hash_update_Stream function ကို အသုံးပြု. Segmented hash uploads များကိုအကောင်အထည်ဖော်ရန်အခြေခံနည်းလမ်းဖြစ်သည်။ ဒီဆောင်းပါးကသင့်အတွက်အထောက်အကူဖြစ်လိမ့်မယ်လို့မျှော်လင့်ပါတယ်။