PHP တွင်ဖိုင်၏သမာဓိကိုသေချာစေရန် hash_update_stream မှတဆင့်ကြီးမားသောဖိုင်ကြီးတစ်ခု၏ hash တန်ဖိုးကိုတွက်ချက်နိုင်သည်။ ဒေတာဘေ့စ်မှတ်တမ်းဖိုင်ကိုဆေးထည့်ပါ။ ဖိုင်၏သမာဓိကိုစစ်ဆေးရန်ဖိုင်၏သမာဓိကိုစစ်ဆေးသောအခါဖိုင်၏ hash တန်ဖိုးကိုလျင်မြန်စွာနှိုင်းယှဉ်နိုင်သည်။ ဤဆောင်းပါးသည်ဤလုပ်ငန်းစဉ်ကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုအသေးစိတ်ရှင်းပြပါမည်။
hash_update_stream function ကိုဖိုင်စီးမှ hash တန်ဖိုးများကိုတွက်ချက်ရန်အသုံးပြုသည်။ တစ်ချိန်တည်းတွင်ဖိုင်များကိုမှတ်ဉာဏ်ထဲသို့ 0 င်ရောက်ခြင်းနည်းလမ်းနှင့်နှိုင်းယှဉ်လျှင် streaming processing ကိုအသုံးပြုခြင်းသည်ကြီးမားသောဖိုင်များကိုလုပ်ဆောင်ရန်အထူးသဖြင့်သင့်လျော်သောမှတ်ဉာဏ်ကိုထိရောက်စွာသိမ်းဆည်းနိုင်သည်။
bool hash_update_stream ( resource $context , resource $handle [, int $length ] )
$ Context : hash_init () အားဖြင့် Hash အခြေအနေ။
$ လက်ကိုင် - မှန်ကန်သောဖိုင်လက်ကိုင်။
$ အရှည် (optional) - တစ်ချိန်တည်းတွင် bytes အရေအတွက်ကိုဖတ်ပါ။ ပုံမှန်အားဖြင့် 8192 bytes ဖြစ်သည်။
ဤလုပ်ဆောင်ချက်သည်များသောအားဖြင့် Hash_init () နှင့် hash_final () နှင့်အသုံးပြုလေ့ရှိသည်။
hash_update_stream ကို အသုံးပြုခြင်းအားဖြင့်ဖိုင်၏ hash တွက်ချက်မှုရလဒ်များကိုဒေတာဘေ့စ်သို့ဆွဲထုတ်နိုင်သည်။ အတည်ပြုသောအခါဖိုင်၏ hash တန်ဖိုးကိုပြန်လည်တွက်ချက်ရန်သာလျှင်ဖိုင်သမာဓိစစ်ဆေးမှုကိုရရှိရန်ဒေတာဘေ့စ်တွင်သိမ်းဆည်းထားသည့်တန်ဖိုးများနှင့်နှိုင်းယှဉ်ပါ။
ဤတွင်လုပ်ငန်းစဉ်တစ်ခုလုံးအတွက်အတိုချုပ်အဆင့်များ -
ဖိုင်တစ်ခုကိုတင်သည့်အခါဖိုင်၏ hash တန်ဖိုးကိုဒေတာဘေ့စ်တွင်တွက်ချက်သည်။
ဖိုင်ကိုအတည်ပြုသည့်အခါ hash သည်ဒေတာဘေ့စ်မှဖတ်ပြီးအသစ်တွက်ချက်ထားသည့် hash နှင့်နှိုင်းယှဉ်သည်။
ပွဲစဉ်နှစ်ခုပါက၎င်းသည်ဖိုင်ကိုအနှောင့်အယှက်မပေးထားကြောင်းဆိုလိုသည်။ ဒီလိုမှမဟုတ်ရင်ဖိုင်ရဲ့သမာဓိကိုမေးခွန်းထုတ်လိမ့်မယ်။
ပထမ ဦး စွာ File Information နှင့် Hash တန်ဖိုးများကိုမှတ်တမ်းတင်ရန်ရိုးရှင်းသောဒေတာဘေ့စ်စားပွဲတစ်ခုကိုဒီဇိုင်းဆွဲပါ။ ဒေတာဘေ့စ်တွင် ဖိုင်များ စားပွဲပေါ်မှာဖိုင်များစားပွဲပေါ်မှာရှိပြီး,
CREATE TABLE `files` (
`id` INT AUTO_INCREMENT PRIMARY KEY,
`filename` VARCHAR(255) NOT NULL,
`hash` CHAR(64) NOT NULL,
`uploaded_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Filename သည် ဖိုင်၏ hash တန်ဖိုးကိုသိုလှောင်ထားသည့်ဖိုင်အမည်, hash တန်ဖိုးကိုသိုလှောင်ထားသည့် ဖိုင် အမည်ကိုသိုလှောင်ထားသည်။
အသုံးပြုသူတစ် ဦး သည်ဖိုင်တစ်ခုတင်သောအခါဖိုင်၏ hash တန်ဖိုးကိုတွက်ချက်ရန်နှင့်ဖိုင်အမည်နှင့်၎င်း၏ hash valf ကိုဒေတာဘေ့စ်သို့သိမ်းဆည်းရန်ဖိုင်စီးကို hash_update_stream သို့ကျွန်ုပ်တို့ဖြတ်သန်းသွားသည်။
<?php
// ဖိုင်တင်ချောင်းအသစ်ပြုပြင်ခြင်းကိုယူဆပါ
if (isset($_FILES['file'])) {
// ဖိုင်များကိုတင်ခြင်းနှင့်ပတ်သက်သောသတင်းအချက်အလက်များကိုရယူပါ
$fileTmpPath = $_FILES['file']['tmp_name'];
$fileName = $_FILES['file']['name'];
// Hash တွက်ချက်မှုကိုအစပြုပါ
$hashContext = hash_init('sha256');
// ဖိုင်စီးကိုဖွင့်ပါ
$fileHandle = fopen($fileTmpPath, 'rb');
// hash တန်ဖိုးတွက်ချက်
while (!feof($fileHandle)) {
// update hash
hash_update_stream($hashContext, $fileHandle);
}
// နောက်ဆုံး hash တန်ဖိုးကိုရယူပါ
$fileHash = hash_final($hashContext);
// Hash တန်ဖိုးကိုဒေတာဘေ့စ်သို့သိမ်းပါ
$db = new mysqli('localhost', 'root', '', 'file_db');
$stmt = $db->prepare("INSERT INTO files (filename, hash) VALUES (?, ?)");
$stmt->bind_param("ss", $fileName, $fileHash);
$stmt->execute();
// ဖိုင်လက်ကိုင်ကိုပိတ်ပါ
fclose($fileHandle);
}
?>
ဤဥပမာတွင် Hash_init () ကို အသုံးပြု. Hash_update_stram () ကို အသုံးပြု. Hash Value ၏ hash တန်ဖိုးကိုတွက်ချက်ရန် Hash_update_stream () ကို သုံးပါ။
နောက်ဆက်တွဲအတည်ပြုမှုဖြစ်စဉ်တွင်ကျွန်ုပ်တို့သည်ဖိုင်အမည်အရသိရသည်သက်ဆိုင်ရာ hash တန်ဖိုးကိုဒေတာဘေ့စ်မှရယူပြီးလက်ရှိဖိုင်၏ hash တန်ဖိုးနှင့်နှိုင်းယှဉ်နိုင်သည်။
<?php
// ဖိုင်ကိုစစ်ဆေးခြင်းအပြောင်းအလဲနဲ့ယူဆပါ
$fileNameToVerify = 'example_file.txt'; // ဖိုင်အမည်ကိုအတည်ပြုရန်လိုအပ်သည်ဟုယူဆပါ
$filePath = '/path/to/files/' . $fileNameToVerify;
// ဒေတာဘေ့စ်တွင် hash တန်ဖိုးကိုရယူပါ
$db = new mysqli('localhost', 'root', '', 'file_db');
$stmt = $db->prepare("SELECT hash FROM files WHERE filename = ?");
$stmt->bind_param("s", $fileNameToVerify);
$stmt->execute();
$result = $stmt->get_result();
$row = $result->fetch_assoc();
$storedHash = $row['hash'];
// လက်ရှိဖိုင်၏ hash တန်ဖိုးကိုတွက်ချက်ပါ
$hashContext = hash_init('sha256');
$fileHandle = fopen($filePath, 'rb');
while (!feof($fileHandle)) {
hash_update_stream($hashContext, $fileHandle);
}
$currentHash = hash_final($hashContext);
fclose($fileHandle);
// Hash တန်ဖိုးများကိုဒေတာဘေ့စ်တွင်လက်ရှိတွက်ချက်ထားသည့် Hash တန်ဖိုးများနှင့်အတူဒေတာဘေ့စ်နှင့်နှိုင်းယှဉ်ခြင်း
if ($currentHash === $storedHash) {
echo "ဖိုင်သမာဓိအတည်ပြုစိစစ်အတည်ပြု!";
} else {
echo "ဖိုင်သမာဓိစစ်ဆေးမှုအတည်ပြုချက်မအောင်မြင်ပါ!";
}
?>
စိစစ်အတည်ပြုနေစဉ်အတွင်းဒေတာဘေ့စ်မှဖိုင်၏ hash တန်ဖိုးကိုပထမ ဦး ဆုံးရယူပြီးဖိုင်၏ hash တန်ဖိုးကိုပြန်လည်တွက်ချက်ပြီးနောက်ဆုံးတွင်နှိုင်းယှဉ်ပါ။ နှစ်ခု hashes အတူတူပါပဲဆိုပါကဖိုင်ကိုပြုပြင်မထားပါဟုဆိုလိုသည်။ အကယ်. ၎င်းသည်ကိုက်ညီမှုမရှိပါကဖိုင်ကိုအနှောင့်အယှက်ပေးလိမ့်မည်။
hash_update_stream နှင့်ဒေတာဘေ့စ်သစ်တင်ခြင်းပုံစံကိုပေါင်းစပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ဖိုင်သမာဓိကိုထိရောက်စွာအတည်ပြုနိုင်သည်။ ဖိုင်များ (သို့) နောက်ဆက်တွဲအတည်ပြုခြင်းဆိုသည်မှာမှတ်တမ်းတင်ခြင်းရှိမရှိ, သိုလှောင်ရုံကိုစက်ဆုပ်ရွံရှာဘွယ်သောတွက်ချက်မှုသည်မှတ်ဥာဏ်အသုံးပြုမှုကိုထိထိရောက်ရောက်လျှော့ချနိုင်သည်။