ဖိုင်များကိုတင်သည့်အခါဖိုင်များ၏သမာဓိနှင့်လုံခြုံရေးကိုသေချာစေရန်အလွန်အရေးကြီးသောခြေလှမ်းတစ်ခုဖြစ်သည်။ ဖိုင်ကိုတင်စဉ်အတွင်းဖိုင်ကိုအနှောင့်အယှက်ဖြစ်စေခြင်းရှိမရှိစစ်ဆေးရန် Hash Verification ကိုကျွန်ုပ်တို့အသုံးပြုနိုင်သည်။ PHP သည်ကြီးမားသောဖိုင်များကိုထိရောက်စွာစစ်ဆေးနိုင်သည့် hash_update_stream function ကိုထောက်ပံ့ပေးသည်။
ဤဆောင်းပါးသည် Hash_update_Stream function ကို အသုံးပြု. ဖိုင်များ၏လုံခြုံမှုကိုပြုလုပ်ရန်နှင့်ဖိုင်များ၏လုံခြုံရေးကိုသေချာစေရန်မည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်ဖော်ပြထားသည်။
hash_update_stream သည် PHP တွင် built-in hash function ဖြစ်သည်။ ၎င်းသည်တကယ့်အချိန်နှင့် hash တွင်ထိုကဲ့သို့သော (ထိုကဲ့သို့သောဖိုင်စီးကဲ့သို့) stream process နိုင်ပါတယ်။ ဖိုင်တစ်ခုလုံးကို hash scressification အတွက်တစ်ကြိမ်တွင် hash_update_stream function ကိုချိန်ညှိခြင်းနှင့်နှိုင်းယှဉ်လျှင် Hash_update_Stream function သည် memory restications များကိုသိမ်းဆည်းနိုင်ပြီးကြီးမားသောဖိုင်များကိုစစ်ဆေးရန်သင့်တော်သည်။
function ကိုလက်မှတ်သည်အောက်ပါအတိုင်းဖြစ်သည် -
bool hash_update_stream ( resource $context , resource $file )
Hash_init function မှဖန်တီးထားသော Hash Context အရင်းအမြစ်။
$ file : file ုပ်ရွံရှာခြင်း, များသောအားဖြင့် fopen function မှဖွင့်လှစ်ထားသောဖိုင်စီးတစ်ခုံး။
ဖိုင်များကိုတင်သည့်အခါဖိုင်အချက်အလက်ရရန် $ _files hyperglobal array ကိုအသုံးပြုလေ့ရှိသည်။ Hash Verification မလုပ်ဆောင်မီကျွန်ုပ်တို့သည်ဖိုင်သည်တရားဝင်နှင့်လုပ်ဆောင်မှုရှိမရှိစစ်ဆေးရန်လိုအပ်သည်။
ဖိုင်တစ်ခုတင်ခြင်း၏အခြေခံဥပမာတစ်ခုဖြစ်သည်။
if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['file'])) {
$file = $_FILES['file'];
// ဖိုင်ကိုအောင်မြင်စွာတင်ခြင်းရှိမရှိစစ်ဆေးပါ
if ($file['error'] === UPLOAD_ERR_OK) {
$filePath = $file['tmp_name']; // ယာယီဖိုင်လမ်းကြောင်း
$fileName = $file['name'];
// Hash စိစစ်အတည်ပြုလုပ်ဆောင်ပါ
if (checkFileHash($filePath)) {
echo "ဖိုင်အလုံအလောက် Verification ကိုအောင်မြင်စွာစစ်ဆေးပါ,ဖိုင်လုံခြုံရေး。";
} else {
echo "ဖိုင် hash စိပ်အသိစစ်ရေးပျက်ကွက်,ဖိုင်ကိုအနှောင့်အယှက်ပေးခဲ့ကြပေမည်。";
}
} else {
echo "ဖိုင်တင်ခြင်းမအောင်မြင်ပါ,အမှားကုဒ်:" . $file['error'];
}
}
နောက်တစ်ခုက SHOP_UPDAKE_STREAM function ကို Hash_update_stream function ကို supploaded file to hash_update_stream function ကိုငါတို့ရေးတယ်။
function checkFileHash($filePath) {
// aSHA256Hash အခြေအနေ
$hashContext = hash_init('sha256');
// ဖိုင်စီးကိုဖွင့်ပါ
$fileStream = fopen($filePath, 'rb');
if ($fileStream === false) {
return false; // 无法ဖိုင်စီးကိုဖွင့်ပါ
}
// အသုံးပြု hash_update_stream file stream ကိုဆေးကြော
if (hash_update_stream($hashContext, $fileStream)) {
// နောက်ဆုံး hash တန်ဖိုးကိုရယူပါ
$fileHash = hash_final($hashContext);
fclose($fileStream);
// သငျသညျ hash တန်ဖိုးကိုမျှော်လင့်ထားသည့်တန်ဖိုးနှင့်နှိုင်းယှဉ်နိုင်ပါတယ်,ဖိုင်နှင့်အတူ famered မထားဘူးသေချာပါစေ
// ဤနေရာတွင်ဥပမာတန်ဖိုးများ `မျှော်လင့်ထား hash တန်ဖိုး` ဥပမာတစ်ခုအနေဖြင့်,သင်အမှန်တကယ်မှန်ကန်သော hash တန်ဖိုးနှင့်အတူအစားထိုးရန်လိုအပ်သည်
$expectedHash = 'မျှော်လင့်ထား hash တန်ဖိုး';
return $fileHash === $expectedHash;
}
fclose($fileStream);
return false; // Hash တွက်ချက်မှုပျက်ကွက်
}
hash_update_stream function ၏အဓိကအားသာချက်မှာဖိုင်တစ်ခုလုံးကိုဖိုင်တစ်ခုလုံးကိုမတင်ဘဲကိုင်တွယ်နိုင်သည်။ ကြီးမားသောဖိုင်များအတွက် hash_update_stream ကို အသုံးပြုခြင်းသည်ဖိုင်တစ်ခုလုံးကိုတစ်ပြိုင်နက်တည်းတင်ခြင်းထက်ပိုမိုထိရောက်စေသည်။ အထူးသဖြင့်မှတ်ဉာဏ်အရင်းအမြစ်များနှင့်အကန့်အသတ်ရှိသောပတ်ဝန်းကျင်တွင်ရှိသည်။
Hash_update_Stream function ကိုတင်ထားသောဖိုင်များကိုတင်ထားသောဖိုင်များကိုစစ်ဆေးခြင်းအားဖြင့်တင်ထားသောဖိုင်များကိုဖြည့်ဆည်းပေးစဉ်အတွင်းဖိုင်များကိုထိထိရောက်ရောက်ကာကွယ်တားဆီးနိုင်သည်။ မျှော်လင့်ထားသည့်တန်ဖိုးနှင့်ဖိုင်၏ hash တန်ဖိုးကိုပေါင်းစပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ဖိုင်၏သမာဓိကိုစစ်ဆေးပြီးစနစ်၏လုံခြုံမှုကိုတိုးတက်စေနိုင်သည်။
လက်တွေ့ကျသောအပလီကေးရှင်းများတွင်သင်လိုအပ်သောအရကွဲပြားခြားနားသော hashing algorithms ( sha256 , MD5 စသည်တို့) ကိုရွေးချယ်နိုင်သည်။