လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ဒေတာဘေ့စနှင့်အတူပေါင်းစပ်: နောက်ဆက်တွဲစိစစ်အတည်ပြုအတွက်စံချိန်တင်ဖိုင်ကိုဆေးထည့်ပါ

ဒေတာဘေ့စနှင့်အတူပေါင်းစပ်: နောက်ဆက်တွဲစိစစ်အတည်ပြုအတွက်စံချိန်တင်ဖိုင်ကိုဆေးထည့်ပါ

M66 2025-06-05

PHP တွင်ဖိုင်၏သမာဓိကိုသေချာစေရန် hash_update_stream မှတဆင့်ကြီးမားသောဖိုင်ကြီးတစ်ခု၏ hash တန်ဖိုးကိုတွက်ချက်နိုင်သည်။ ဒေတာဘေ့စ်မှတ်တမ်းဖိုင်ကိုဆေးထည့်ပါ။ ဖိုင်၏သမာဓိကိုစစ်ဆေးရန်ဖိုင်၏သမာဓိကိုစစ်ဆေးသောအခါဖိုင်၏ hash တန်ဖိုးကိုလျင်မြန်စွာနှိုင်းယှဉ်နိုင်သည်။ ဤဆောင်းပါးသည်ဤလုပ်ငန်းစဉ်ကိုမည်သို့အကောင်အထည်ဖော်ရမည်ကိုအသေးစိတ်ရှင်းပြပါမည်။

1 ။ Hash_update_Stream function ကိုမိတ်ဆက်

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 () နှင့်အသုံးပြုလေ့ရှိသည်။

2 ။ Process ခြုံငုံသုံးသပ်ချက်

hash_update_stream ကို အသုံးပြုခြင်းအားဖြင့်ဖိုင်၏ hash တွက်ချက်မှုရလဒ်များကိုဒေတာဘေ့စ်သို့ဆွဲထုတ်နိုင်သည်။ အတည်ပြုသောအခါဖိုင်၏ hash တန်ဖိုးကိုပြန်လည်တွက်ချက်ရန်သာလျှင်ဖိုင်သမာဓိစစ်ဆေးမှုကိုရရှိရန်ဒေတာဘေ့စ်တွင်သိမ်းဆည်းထားသည့်တန်ဖိုးများနှင့်နှိုင်းယှဉ်ပါ။

ဤတွင်လုပ်ငန်းစဉ်တစ်ခုလုံးအတွက်အတိုချုပ်အဆင့်များ -

  1. ဖိုင်တစ်ခုကိုတင်သည့်အခါဖိုင်၏ hash တန်ဖိုးကိုဒေတာဘေ့စ်တွင်တွက်ချက်သည်။

  2. ဖိုင်ကိုအတည်ပြုသည့်အခါ hash သည်ဒေတာဘေ့စ်မှဖတ်ပြီးအသစ်တွက်ချက်ထားသည့် hash နှင့်နှိုင်းယှဉ်သည်။

  3. ပွဲစဉ်နှစ်ခုပါက၎င်းသည်ဖိုင်ကိုအနှောင့်အယှက်မပေးထားကြောင်းဆိုလိုသည်။ ဒီလိုမှမဟုတ်ရင်ဖိုင်ရဲ့သမာဓိကိုမေးခွန်းထုတ်လိမ့်မယ်။

3 ။ အကောင်အထည်ဖော်မှုအဆင့်များ

1 ။ ဒေတာဘေ့စ်ဖွဲ့စည်းပုံဒီဇိုင်း

ပထမ ဦး စွာ 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 တန်ဖိုးကိုသိုလှောင်ထားသည့် ဖိုင် အမည်ကိုသိုလှောင်ထားသည်။

2 ။ 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 () ကို သုံးပါ။

3 ။ ဖိုင်သမာဓိကိုစစ်ဆေးပါ

နောက်ဆက်တွဲအတည်ပြုမှုဖြစ်စဉ်တွင်ကျွန်ုပ်တို့သည်ဖိုင်အမည်အရသိရသည်သက်ဆိုင်ရာ 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 အတူတူပါပဲဆိုပါကဖိုင်ကိုပြုပြင်မထားပါဟုဆိုလိုသည်။ အကယ်. ၎င်းသည်ကိုက်ညီမှုမရှိပါကဖိုင်ကိုအနှောင့်အယှက်ပေးလိမ့်မည်။

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

hash_update_stream နှင့်ဒေတာဘေ့စ်သစ်တင်ခြင်းပုံစံကိုပေါင်းစပ်ခြင်းအားဖြင့်ကျွန်ုပ်တို့သည်ဖိုင်သမာဓိကိုထိရောက်စွာအတည်ပြုနိုင်သည်။ ဖိုင်များ (သို့) နောက်ဆက်တွဲအတည်ပြုခြင်းဆိုသည်မှာမှတ်တမ်းတင်ခြင်းရှိမရှိ, သိုလှောင်ရုံကိုစက်ဆုပ်ရွံရှာဘွယ်သောတွက်ချက်မှုသည်မှတ်ဥာဏ်အသုံးပြုမှုကိုထိထိရောက်ရောက်လျှော့ချနိုင်သည်။