လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> chunked upload hash (chunked upload hash) ကိုအကောင်အထည်ဖော်ရန် hash_update_stream function ကိုအသုံးပြုနည်း

chunked upload hash (chunked upload hash) ကိုအကောင်အထည်ဖော်ရန် hash_update_stream function ကိုအသုံးပြုနည်း

M66 2025-07-04

ဖိုင်အချို့တင်ဆွဲထားသည့်အခါအော့ဖ်လိုင်းသည်ဖိုင်တစ်ခုလုံးကိုအပြည့်အဝတင်ရန်စောင့်ဆိုင်းခြင်းမရှိဘဲတစ် ဦး ကိုတင်ရန်မစောင့်ရန်ဖိုင်တစ်ခုလုံးကိုတင်ရန်ခွင့်ပြုသည့်အသုံးများသောလုပ်ထုံးလုပ်နည်းတစ်မျိုးဖြစ်သည်။ တစ်ချိန်တည်းမှာပင်ထုတ်လွှင့်သည့်ဖိုင်ကိုထုတ်လွှင့်ခြင်းလုပ်ငန်းစဉ်အတွင်းတင်ထားသောဖိုင်ကိုအနှောင့်အယှက်ပေးရန်သေချာစေရန်အတွက် hash algorithm သည်များသောအားဖြင့်ဖိုင်၏သမာဓိကိုစစ်ဆေးရန်အသုံးပြုလေ့ရှိသည်။ Segmented hash upload ကိုအကောင်အထည်ဖော်ရန်ကူညီနိုင်သည့် PHP သည် hash_update_stream function ကိုထောက်ပံ့ပေးသည်။ ဤဆောင်းပါးသည်ဤလုပ်ဆောင်ချက်ကိုအကောင်အထည်ဖော်ရန် Hash_update_stream function ကိုမည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ဖော်ပြထားသည်။

1 ။ 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 ဖြစ်သည်။

2 ။ Segmented hash upload ကိုဘယ်လိုအကောင်အထည်ဖော်မလဲ

ကျွန်ုပ်တို့တွင် segments များတွင်တင်ရန်လိုအပ်သည့်ပိုကြီးသောဖိုင်ရှိသည်ဆိုပါစို့။ Segmented hash upload ကိုအောက်ပါအတိုင်းအကောင်အထည်ဖော်နိုင်သည်။

2.1 hash အခြေအနေကိုဖန်တီးခြင်း

ပထမ ဦး စွာ hash context ကိုဖန်တီးပြီးတွက်ချက်မှုအတွက် hash algorithm ကိုရွေးချယ်ပါ။

 $hashContext = hash_init('sha256');

2.2 ဖိုင်ကိုဖွင့ ်. segments များတွင် upload လုပ်ပါ

ထို့နောက်ကျွန်ုပ်တို့သည်ဖိုင်စီးဆင်းမှုကိုဖွင့ ်. 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);

2.3 နောက်ဆုံး hash တန်ဖိုးကိုတွက်ချက်ခြင်းနှင့်ပြန်သွားပါ

ဖိုင်၏လုပ်ကွက်များအားလုံးကို upload လုပ်ပြီးလုပ်ဆောင်ပြီးနောက်နောက်ဆုံး hash တန်ဖိုးကိုရရှိရန် hash_final function ကိုသုံးနိုင်သည်။

 $finalHash = hash_final($hashContext);
echo "ဖိုင်၏ hash တန်ဖိုးဖြစ်ပါတယ်:$finalHash";

ဤနည်းအားဖြင့်ဖိုင်တွဲတစ်ခုစီသည်မှန်ကန်စွာ hashed နှင့်နောက်ဆုံးတွင်ဖိုင်တစ်ခုလုံး၏ hash တန်ဖိုးကိုရရန်သေချာစေနိုင်သည်။

3 ။ server နှင့်အတူအစိတ်အပိုင်းများအတွက် hash တန်ဖိုးကိုစစ်ဆေးပါ

Segmented upload လုပ်ငန်းစဉ်အတွင်း client သည်ဖိုင်ပိတ်ပင်တားဆီးမှုတစ်ခုတင်သည့်အခါတိုင်း၎င်းသည်သက်ဆိုင်ရာ hash value (သို့မဟုတ်ဖိုင်တစ်ခုလုံး၏ hash val) ကိုဆာဗာသို့ပေးပို့နိုင်သည်။

ဆာဗာဘေးထွက်စစ်ဆေးခြင်းလုပ်ငန်းစဉ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

3.1 hash ကိုလက်ခံပြီးအတည်ပြုပါ

 // 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);

4 ။ အကျဉ်းချုပ်

Segmented hash upload ကိုအကောင်အထည်ဖော်ရန် hash_update_stream function ကိုအသုံးပြုခြင်းသည်လွယ်ကူပြီးထိရောက်သောနည်းလမ်းတစ်ခုဖြစ်သည်။ အထက်ပါအဆင့်များမှတစ်ဆင့်ကျွန်ုပ်တို့သည်ဖိုင်များကို segments များမှ upload လုပ်ပြီးတင်ထားသောဒေတာများကိုအနှောင့်အယှက်မပေးရန်သေချာစေရန် segments များကို segments များရှိဖိုင်ကိုတင်နိုင်သည်။ ၎င်းကိုတင်ပါလုပ်ငန်းစဉ်အတွင်းဖိုင်၏ block တစ်ခုစီကိုမှန်ကန်သောအစီအစဉ်အတိုင်းတင်ရန်သေချာစေရန်ဆာဗာသည်သက်ဆိုင်ရာ hash verification ပြုလုပ်ရန်လိုအပ်သည်။

အထက်ဖော်ပြပါအချက်သည် Hash_update_Stream function ကို အသုံးပြု. Segmented hash uploads များကိုအကောင်အထည်ဖော်ရန်အခြေခံနည်းလမ်းဖြစ်သည်။ ဒီဆောင်းပါးကသင့်အတွက်အထောက်အကူဖြစ်လိမ့်မယ်လို့မျှော်လင့်ပါတယ်။