လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> hash_update_stream () ဖိုင်ကို Deduplication Function ကိုအကောင်အထည်ဖော်ရန်

hash_update_stream () ဖိုင်ကို Deduplication Function ကိုအကောင်အထည်ဖော်ရန်

M66 2025-05-18

File Deeduplation ဆိုသည်မှာအချက်အလက်အပြောင်းအလဲအတွက်အလွန်အရေးကြီးသောအစိတ်အပိုင်းဖြစ်သည်။ File Deperplication တွင်ပိုမိုထိရောက်စွာလုပ်ဆောင်နိုင်သည့် hash collection များကိုပိုမိုထိရောက်စွာလုပ်ဆောင်နိုင်သည့် hash_update_stream () ကို PHP သည်အလွန်အစွမ်းထက်သော function ကိုပေးသည်။ ဤဆောင်းပါးသည်ထိရောက်သောဖိုင် Deduplactivation function ကိုရရှိရန် Hash_update_stream () function ကိုမည်သို့အသုံးပြုရမည်ကိုအသေးစိတ်မိတ်ဆက်ပေးပါမည်။

1 ။ hash_update_stream () function ကဘာလဲ။

hash_update_stream () သည် PHP တွင် built-in hash function များထဲမှတစ်ခုဖြစ်သည်။ ၎င်းသည်ဖိုင်ကြီးများကိုဖိုင်များမထည့်ဘဲဖိုင်များ၏ contents များကိုတဖြည်းဖြည်းချင်းဖတ်ပြီး hash တန်ဖိုးကိုတွက်ချက်ခြင်းအားဖြင့်ဖိုင်ကြီးများကိုမွေ့မှတ်ဘဲပြုလုပ်နိုင်သည်။ ၎င်းသည်ကြီးမားသောဒေတာဖိုင်များ၏ hash တွက်ချက်မှုများအတွက်သင့်တော်ပြီး Hash တန်ဖိုးများကိုအချိန်မှန်တွင်မွမ်းမံနိုင်သည်။

၎င်း၏ function ကိုလက်မှတ်သည်အောက်ပါအတိုင်းဖြစ်သည် -

 bool hash_update_stream ( resource $context , resource $file , int $length = 8192 )
  • $ Context : hash_init () မှဖန်တီးထားသော hash အခြေအနေကို။

  • $ file : hash တန်ဖိုးကိုတွက်ချက်ရန်ဖိုင်အရင်းအမြစ်။

  • $ အရှည် - ဖိုင်ဖတ်လျှင် bytes အရေအတွက်, default သည် 8192 bytes ဖြစ်သည်။

2 ။ File Deeduplication အောင်မြင်ရန် Hash_update_stream () ကို သုံးပါ

File Deduplication ၏ဖြစ်ရပ်တွင်ဖိုင်တစ်ခုစီအတွက် hash တန်ဖိုးကိုတွက်ချက်ရန်လိုအပ်ပြီး hash တန်ဖိုးရှိပြီးသားရှိမရှိဆုံးဖြတ်ရန်လိုအပ်သည်။ အကယ်. hash တန်ဖိုးရှိပြီးဖြစ်ပါကဖိုင်ကိုပုံတူကူးယူပါက၎င်းကိုဖျက်ပစ်နိုင်သည်။

Hash_update_stream မှတဆင့် () , ကျွန်ုပ်တို့သည်ကြီးမားသောဖိုင်များအပေါ်တစ်ဆင့်ချင်းစီကိုအဆင့်မြင့်တွက်ချက်မှုများကိုမှတ်ဉာဏ်အလွန်အကျွံမစားဘဲထိရောက်စွာလုပ်ဆောင်နိုင်ပြီး,

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

Hash_update_stream () ကို hash တွက်ချက်မှုများကိုပြုလုပ်ရန် Hash_update_stream () ကို အသုံးပြု. File DechPLICE ၏ရိုးရှင်းသော PHP SPP ဥပမာ -

 <?php

// hashing algorithm တက် setting
$hash_algorithm = 'sha256';

// folder ကို deverplicate ဖို့လမ်းကြောင်းကိုရယူပါ
$directory = '/path/to/your/files';

// Hashed တန်ဖိုးများကိုသိုလှောင်ထားသည့်ခင်းကျင်းမှုကိုဖန်တီးပါ
$hashes = [];

// directory ထဲတွင်ဖိုင်အားလုံးကိုရယူပါ
$files = scandir($directory);

foreach ($files as $file) {
    $file_path = $directory . DIRECTORY_SEPARATOR . $file;

    // ခုန်ကျော်သည် '.' နှင့် '..'
    if ($file === '.' || $file === '..') {
        continue;
    }

    // Hash အခြေအနေကိုစတင်ပါ
    $context = hash_init($hash_algorithm);

    // ဖိုင်ကိုဖွင့်ပါ
    $file_resource = fopen($file_path, 'rb');
    if ($file_resource) {
        // တဖြည်းဖြည်း hash တန်ဖိုးကို update
        while (!feof($file_resource)) {
            hash_update_stream($context, $file_resource, 8192);
        }

        // File အရင်းအမြစ်များကိုပိတ်ပါ
        fclose($file_resource);

        // ဖိုင်၏နောက်ဆုံး hash တန်ဖိုးကိုရယူပါ
        $hash = hash_final($context);

        // hash တန်ဖိုးရှိပြီးသားရှိမရှိစစ်ဆေးပါ
        if (in_array($hash, $hashes)) {
            // ဖိုင်ထပ်ခါတလဲလဲလျှင်,ဖျက်ပါ
            unlink($file_path);
            echo "ထပ်တူဖိုင်များကိုဖျက်ပါ: $file\n";
        } else {
            // အခြားနည်းအားဖြင့်,ရှိပြီးသား Hash Array သို့ hash တန်ဖိုးကိုထည့်ပါ
            $hashes[] = $hash;
        }
    } else {
        echo "无法ဖိုင်ကိုဖွင့်ပါ: $file\n";
    }
}

echo "File Deeduplication ပြီးစီးခဲ့သည်!\n";

?>

4 ။ code ခွဲခြမ်းစိတ်ဖြာ

  1. ဖိုင်တွဲထဲရှိဖိုင်များအားလုံးကိုရယူပါ ။ ပထမ ဦး စွာကျွန်ုပ်တို့သည် directory ထဲတွင်ဖိုင်များအားလုံးကိုရယူရန် Snangir () function ကိုသုံးသည်။ ကျနော်တို့ကျော်သွားချင်တယ်ဆိုတာသတိပြုပါ နှင့် .. ဖောင်းပိ။

  2. hash တန်ဖိုးအဆင့်ကိုအဆင့်ဆင့်တွက်ချက်ပါ ။ ဖိုင်တစ်ခုစီအတွက် hash connection ကိုပထမ ဦး ဆုံးအစဖွင့်ထားပြီးထို့နောက် hash_update_stream () ကို သုံး. hash value ကိုဖတ်ရန်

  3. Deduplivation တရားစီရင်ခြင်း - တွက်ချက်ထားသည့် hash value array $ hash များကို သိမ်းဆည်းခြင်းအားဖြင့်လက်ရှိဖိုင်၏ hash တန်ဖိုးသည်ရှိပြီးသားရှိမရှိဆုံးဖြတ်သည်။ အကယ်. ၎င်းသည်တည်ရှိပါကဖိုင်ကိုထပ်ခါတလဲလဲပြုလုပ်ပြီးဖိုင်ကိုတိုက်ရိုက်ဖျက်ပစ်ခြင်းကိုဆိုလိုသည်။ ဒီလိုမှမဟုတ်ရင် hash value ကို array ထဲထည့်ပြီးနောက်ဖိုင်ကိုဆက်လုပ်ပါ။

5 ။ အကောင်းမြင်ခြင်းနှင့်ကြိုတင်ကာကွယ်မှုများ

  • Memory Optimization : hash_update_stram () function ကိုဖြင့်ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့မတင်နိုင်သဖြင့်ကြီးမားသောဖိုင်များကိုကိုင်တွယ်နိုင်သည်။

  • တစ်ပြိုင်နက်တည်းdeedוlolation : များစွာသောဖိုင်များ၏ကြီးမားသောဖိုင်များအတွက်, အများအပြားချည်သို့မဟုတ်အသုတ်သို့မဟုတ်သုတ်ထုတ်ယူခြင်းကို Depuploplication Speed ​​တိုးမြှင့်ဖို့အသုံးပြုနိုင်ပါတယ်။ PHP သည် လူမျိုးပေါင်းစုံ ပေါင်းစုံကိုမပံ့ပိုးနိုင်ပါ။

  • Hash Collision -hash collision ဖြစ်နိုင်ချေသည်အလွန်အမင်းဖြစ်ရပ်များတွင်အလွန်နည်းပါးသော်လည်း, ဖိုင်တွဲများ၏ hash တန်ဖိုးများသည်အတူတူပင်ဖြစ်သော်လည်း, ထို့ကြောင့်လုံလောက်သောခိုင်မာသည့် algorithm ကိုရွေးချယ်ခြင်း ( sha256 စသည့်) ဤအန္တရာယ်ကိုများစွာလျှော့ချနိုင်သည်။

6 ။ နိဂုံးချုပ်

Hash_update_stream () function ကိုအသုံးပြုခြင်းသည်အထူးသဖြင့်မှတ်ဉာဏ်သုံးစွဲမှုကိုသိသိသာသာလျှော့ချနိုင်သည့်ဖိုင်ကြီးများကိုသိသိသာသာလျှော့ချနိုင်သည့်ဖိုင်များကိုပြုပြင်ပြောင်းလဲခြင်းနှင့်ထိရောက်မှုကိုသိသိသာသာလျှော့ချနိုင်သည်။ ရိုးရှင်းသော hash value ကိုစီရင်ချက်မှတစ်ဆင့်ကျွန်ုပ်တို့သည်ပုံတူဖိုင်များကိုအလွယ်တကူဖျက်ပစ်နိုင်သည်, သိုလှောင်ရန်နေရာချောင်းမြောင်းရန်နှင့်စနစ်စွမ်းဆောင်ရည်ကိုတိုးတက်စေသည်။

ဤဆောင်းပါးသည်ဖိုင်ကိုအကောင်အထည်ဖော်ရန် hash_update_stream () ကို ပိုမိုနားလည်ရန်နှင့်အသုံးပြုရန် Hash_update_stram () ကိုအသုံးပြုရန်ကူညီနိုင်သည်ဟုကျွန်ုပ်မျှော်လင့်ပါသည်။ သင့်တွင်မေးခွန်းများရှိပါကမှတ်ချက်ပေးရန်ရိယာတွင်စာတစ်စောင်ထားခဲ့ပါ။