လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> ကြီးမားသောဖိုင်များပြုပြင်သည့်အခါ hash_update ၏စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်အောင်ဘယ်လိုလုပ်မလဲ။

ကြီးမားသောဖိုင်များပြုပြင်သည့်အခါ hash_update ၏စွမ်းဆောင်ရည်ကိုပိုမိုကောင်းမွန်အောင်ဘယ်လိုလုပ်မလဲ။

gitbox 2025-06-07

ကြီးမားသောဖိုင်များပြုပြင်သည့်အခါ PHP ၏ hash_update function သည် MD5, Sha-1 သို့မဟုတ် Secure Sha-25 စသည့် hash တန်ဖိုးများကိုတွက်ချက်ခြင်းကဲ့သို့သောဖိုင်အကြောင်းအရာကိုမကြာခဏအသုံးပြုလေ့ရှိသည်။ သို့သော် Hash_update ကို အသုံးပြုခြင်းသည်များသောအားဖြင့်ကြီးမားသောဖိုင်များအတွက်စွမ်းဆောင်ရည်မြှင့်တင်ရေးများကိုတိုက်ရိုက်ကြုံတွေ့ရနိုင်သည်။ ဤဆောင်းပါးသည် Hash_update ၏စွမ်းဆောင်ရည်ကိုနမူနာကုဒ်နှင့်အတူတိုးတက်စေရန်ထိရောက်သောနည်းလမ်းများစွာကိုလေ့လာလိမ့်မည်။


1 ။ တစ်ပြိုင်နက်တည်းတင်ခြင်းကိုရှောင်ရှားရန်ဖိုင်များကိုဖတ်ရန် chunks များကိုသုံးပါ

ဖိုင်တစ်ခုလုံးကိုမှတ်ဉာဏ်ထဲသို့တိုက်ရိုက်ဖတ်ရှုပြီး Hash သည်မှတ်ဥာဏ်လျှံသို့မဟုတ်စွမ်းရည်မကောင်းသောစိတ်ဓာတ်ကိုဖြစ်ပေါ်စေသည်။ အကောင်းဆုံးအလေ့အကျင့်မှာ Batherh_update သို့တဖြည်းဖြည်းချင်းပ ont ိညာဉ်စာတမ်းများကိုတဖြည်းဖြည်းချင်းဖတ်ရန်အလေ့အကျင့်ဖြစ်သည်။

 <?php
$filename = '/path/to/large/file.zip';
$context = hash_init('sha256');

$handle = fopen($filename, 'rb');
if ($handle === false) {
    die('Failed to open file');
}

while (!feof($handle)) {
    $buffer = fread($handle, 8192);  // 8KB တစ်ခုချင်းစီကိုဖတ်ပါ
    hash_update($context, $buffer);
}

fclose($handle);

$hash = hash_final($context);
echo "File hash: $hash\n";
?>

ဤနေရာတွင် 8KB Buffer အရွယ်အစားကို System Memory နှင့် IO စွမ်းဆောင်ရည်အတိုင်းချိန်ညှိနိုင်သည်။


2 ။ သင့်လျော်သော buffer အရွယ်အစားကိုရွေးချယ်ပါ

ကြားခံအရွယ်အစားသည်တိုက်ရိုက်ဖတ်ခြင်းနှင့်ရေးခြင်းဖျော်ဖြေမှုကိုတိုက်ရိုက်သက်ရောက်သည်။ သေးငယ်လွန်းသော IO စစ်ဆင်ရေးအမြောက်အများကို ဦး တည်သွားစေလိမ့်မည်။ ယေဘုယျအားဖြင့်ပြောရလျှင် 8KB မှ 64KB သည်ရွေးချယ်မှုကောင်းတစ်ခုဖြစ်သည်။ အကောင်းဆုံးစွမ်းဆောင်ရည်ကို အရူး ၏ဒုတိယ parameter ကိုချိန်ညှိခြင်းဖြင့်စမ်းသပ်နိုင်သည်။


3 ။ PHP Built-in function hash_file (ထောက်ပံ့ပါက)

PHP နှင့်ပါ 0 င်သည့် hash_file function သည် PHP scripts ပိတ်ပင်တားဆီးမှုဖြင့်စာဖတ်ခြင်းပိတ်ပင်တားဆီးမှုထက်နောက်ခံအကောင်အထည်ဖော်မှုတွင်ပိုမိုထိရောက်စေသည်။ အကယ်. သင် hash တန်ဖိုးကိုတွက်ချက်ရုံသာလျှင်၎င်းကိုတိုက်ရိုက်အသုံးပြုရန်စဉ်းစားနိုင်သည်။

 <?php
$hash = hash_file('sha256', '/path/to/large/file.zip');
echo "File hash: $hash\n";
?>

ဤနည်းလမ်းသည်သင့်အားဖိုင်ထောက်လှမ်းရေးကိုသင်ကိုယ်တိုင်စီမံရန်သင့်အားမလိုအပ်ပါ။ ၎င်းသည်စွမ်းဆောင်ရည်ကောင်း၏။


4 ။ Paralalled processing (multi-thread / multi-process)

အကယ်. ပတ် 0 န်းကျင်ကိုပတ် 0 န်းကျင်ကိုခွင့်ပြုပါကဖိုင်ကိုအပိုင်းပိုင်း ခွဲ. ခွဲထုတ်နိုင်သည်။ PHP သည်လူပေါင်းစုံကိုလူမျိုးပေါင်းစုံကိုမထောက်ပံ့သော်လည်း PCNTL_Fork သို့မဟုတ်ပြင်ပ extensions များဖြင့်အကောင်အထည်ဖော်နိုင်သည်။

သို့သော်ဤဖြေရှင်းချက်သည်ရှုပ်ထွေးပြီး algorithm အကောင်အထည်ဖော်မှုကိုဆေးကြောရန်အတွက်အထူးလိုအပ်ချက်များရှိပြီးအထူးသဖြင့်ကြီးမားသောဖိုင်များနှင့်အထူးအခြေအနေများအတွက်သင့်လျော်သည်။


5 ။ ထပ်ခါတလဲလဲတွက်ချက်မှုများကိုရှောင်ကြဉ်ပါနှင့် cacheing ယန္တရားကိုသုံးပါ

ဖိုင်သည်မကြာခဏမပြောင်းလဲပါကထပ်ခါတလဲလဲတွက်ချက်မှုများကိုလျှော့ချရန်ဖိုင်၏ hash တန်ဖိုးကိုသင်စဉ်းစားနိုင်သည်။

ဥပမာအားဖြင့်, နောက်ဆုံးပြင်ဆင်ခြင်းအချိန်နှင့်ဖိုင်၏ hash တန်ဖိုးကို ဦး စွာသိမ်းဆည်းပါ။

 <?php
$filename = '/path/to/large/file.zip';
$cacheFile = '/tmp/file_hash_cache.json';

$cache = json_decode(file_get_contents($cacheFile) ?: '{}', true);
$filemtime = filemtime($filename);

if (isset($cache[$filename]) && $cache[$filename]['mtime'] === $filemtime) {
    $hash = $cache[$filename]['hash'];
} else {
    $hash = hash_file('sha256', $filename);
    $cache[$filename] = ['mtime' => $filemtime, 'hash' => $hash];
    file_put_contents($cacheFile, json_encode($cache));
}

echo "File hash: $hash\n";
?>

၎င်းသည် Hash ကိုအချိန်တိုင်းပြန်လည်တွက်ချက်ခြင်းကိုရှောင်ရှားသည်။


6 ။ သင့်လျော်သော hashing algorithm ကိုသုံးပါ

ကွဲပြားခြားနားသော hashing algorithms ၏စွမ်းဆောင်ရည်သည်အလွန်ကွဲပြားခြားနားသည်။ MD5 နှင့် Sha-1 သည် Sha-256 ထက်ပိုမိုမြန်ဆန်သည်, သို့သော်လုံခြုံမှုနည်းပါးသည်။ ဇာတ်လမ်းချုပ်၏အမြန်နှုန်းနှင့်လုံခြုံရေးလိုအပ်ချက်များအပေါ် အခြေခံ. သင့်လျော်သော algorithm ကိုရွေးချယ်ပါ။


အကျဉ်းချုပ်

  • စာဖတ်ခြင်းကိုပိတ်ပင်တားဆီးမှု - တစ်ချိန်တည်းတွင်စာဖတ်ခြင်းကိုရှောင်ကြဉ်ပါ

  • Buffer Size ကိုချိန်ညှိပါ

  • HashH_File function ကိုအသုံးပြုပါ ။ PHP hash file function hash file function ကိုသာလွန်စွမ်းဆောင်ရည်နှင့်အတူ။

  • Parallel Processing : သင်ဟာကြီးမားသောဖိုင်များအတွက် Process Sharding တွက်ချက်မှုများကိုပြုလုပ်နိုင်သည်။

  • cache hash ရလဒ်များ - မပြောင်းလဲသောဖိုင်များ၏ထပ်ခါတလဲလဲတွက်ချက်မှုများကိုရှောင်ပါ။

  • မှန်ကန်သော algorithm ကိုရွေးချယ်ပါ ။ အမြန်နှုန်းနှင့်လုံခြုံရေးအပေးအယူများအပေါ် အခြေခံ. Hash algorithm ကိုရွေးချယ်ပါ။

ဤနည်းစနစ်များကိုကျွမ်းကျင်ခြင်းသည် File Hashes ကြီးမားသောဖိုင်များကိုကိုင်တွယ်သည့်အခါ PPP အစီအစဉ်များ၏စွမ်းဆောင်ရည်ကိုသိသိသာသာတိုးတက်စေနိုင်သည်။


 <?php
// နမူနာကုဒ်:ဖိုင်များကိုအတုံးများတွင်ဖတ်ပါ hash_update ရေတွက် SHA-256
$filename = 'https://gitbox.net/path/to/large/file.zip';
$context = hash_init('sha256');

$handle = fopen($filename, 'rb');
if ($handle === false) {
    die('Failed to open file');
}

while (!feof($handle)) {
    $buffer = fread($handle, 65536);  // 64KB
    hash_update($context, $buffer);
}

fclose($handle);

$hash = hash_final($context);
echo "File hash: $hash\n";
?>