PHP ဖွံ့ဖြိုးတိုးတက်မှုတွင် MD5_File () function ကိုဖိုင်များ၏သမာဓိကိုစစ်ဆေးရန်အသုံးပြုသည်။ ၎င်းသည် MD5 hash တန်ဖိုးကိုဖိုင်၏ MD5 hash တန်ဖိုးကိုတွက်ချက်သည်။ developer များကဖိုင်အိတ်များသည်သို့မဟုတ်ပုံတူပွားခြင်းရှိမရှိကိုမြန်မြန်ဆန်ဆန်စစ်ဆေးသည်။ အထူးသဖြင့် MD5_File () ကို အသုံးပြု. ဖိုင်များစွာကိုပြုပြင်သည့်အခါ,
ဖိုင်အမြောက်အများကိုပြုပြင်သောအခါ MD5_File () function ကိုမည်သို့ထိရောက်စွာအသုံးပြုရမည်ကိုဤဆောင်းပါးသည် MD5_File () function ကိုမည်သို့အသုံးပြုရမည်ကိုအာရုံစိုက်မည်။
MD5_File () သည် PHP built-in function တစ်ခုဖြစ်ပြီးသတ်မှတ်ထားသောဖိုင်၏ MD5 hash တန်ဖိုးကိုတိုက်ရိုက်တွက်ချက်သည်။ Syntax သည်အောက်ပါအတိုင်းဖြစ်သည် -
$hash = md5_file('/path/to/file');
ဤလုပ်ဆောင်ချက်သည် MD5 တန်ဖိုးကိုကိုယ်စားပြုသော 32-bit hexadecimal string ကိုပြန်ပို့သည်။ ဖိုင်အကြောင်းအရာကိုအရင်ဖတ်ရှုခြင်းနှင့်နှိုင်းယှဉ်လျှင် MD5 () function, md5_file () ကိုတိုက်ရိုက်ခေါ်ဆိုခြင်းနှင့်နှိုင်းယှဉ်လျှင် MD5 () ဖိုင်ကိုတိုက်ရိုက်ပစ်မှတ်ထားသည်။
ထောင်ပေါင်းများစွာသောသို့မဟုတ်သောင်းနှင့်သောင်းနှင့်သောင်းနှင့်သောင်းနှင့်သောင်းနှင့်သောင်းနှင့်သောင်းလျက်ရှိသည်။ MD5_File သို့ရိုးရိုးကွင်းဆက်ခေါ်ဆိုမှုတစ်ခုသည်အောက်ပါပြ problems နာများကိုဖြစ်ပေါ်စေလိမ့်မည်။
i / o Butterleneck : ခေါ်ဆိုမှုတစ်ခုစီသည်ဖိုင်အမျိုးအစားကိုဖတ်ရှုပြီးမကြာခဏ disk access သည်စွမ်းဆောင်ရည်ပျက်စီးခြင်းကိုဖြစ်ပေါ်စေသည်။
Memory စားသုံးမှု - MD5_File () သည်မှတ်ဥာဏ်နည်းသော်လည်း,
ကြာရှည်စွာတုန့်ပြန်မှုအချိန် - ထပ်တူပြုခြင်းသည်ထပ်တူပြုခြင်းအနေဖြင့်အသုံးပြုသူအတွေ့အကြုံကိုထိခိုက်နိုင်သောအချိန်ကြာမြင့်စွာပိတ်ဆို့နိုင်သည်။
အကယ်. ဖိုင်သည်မကြာခဏမပြောင်းလဲပါကထပ်ခါတလဲလဲတွက်ချက်မှုများကိုရှောင်ရှားရန်တွက်ချက်ထားသော MD5 တန်ဖိုးကိုသိမ်းဆည်းထားနိုင်သည်။
နမူနာကုဒ်:
$cacheFile = '/path/to/cache/md5_cache.json';
function getCachedMd5($file) {
global $cacheFile;
static $cache = null;
if ($cache === null) {
if (file_exists($cacheFile)) {
$cache = json_decode(file_get_contents($cacheFile), true);
} else {
$cache = [];
}
}
$modTime = filemtime($file);
if (isset($cache[$file]) && $cache[$file]['mtime'] === $modTime) {
return $cache[$file]['md5'];
}
$md5 = md5_file($file);
$cache[$file] = ['md5' => $md5, 'mtime' => $modTime];
file_put_contents($cacheFile, json_encode($cache));
return $md5;
}
// အသုံးပြုမှုဥပမာ
$files = ['/path/to/file1', '/path/to/file2'];
foreach ($files as $file) {
echo "စာချုပ်စာတမ်း {$file} ၏ MD5 အတည်ပြုကုဒ်ဖြစ်ပါတယ်:" . getCachedMd5($file) . PHP_EOL;
}
ဖိုင်ပြုပြင်မွမ်းမံချိန်ကိုနှိုင်းယှဉ်ခြင်းအားဖြင့် MD5 သည်ဖိုင်အမျိုးအစားပြောင်းလဲခြင်း,
Multi-Threading ကိုထောက်ပံ့သောပတ်ဝန်းကျင်တွင်တစ်ပြိုင်နက်တည်းနည်းပညာကို Pnntl_form ကိုလျှော့ချရန် PCNTL_Form () မှတဆင့်အပြိုင်တိုးချဲ့ခြင်းကဲ့သို့သောနည်းပညာကိုအသုံးပြုနိုင်သည်။
ရိုးရှင်းသောဥပမာ (Multi-process IDEA):
$files = ['/path/to/file1', '/path/to/file2', '/path/to/file3'];
foreach ($files as $file) {
$pid = pcntl_fork();
if ($pid == -1) {
die('ကလေးဖြစ်စဉ်ကို ဖန်တီး. မရပါ');
} elseif ($pid === 0) {
// subprocess တွက်ချက်မှု MD5
echo "စာချုပ်စာတမ်း {$file} ၏ MD5:" . md5_file($file) . PHP_EOL;
exit(0);
}
}
// မိဘလုပ်ငန်းစဉ်သည်ကလေးဖြစ်စဉ်များကိုအဆုံးသတ်ရန်စောင့်သည်
while (pcntl_waitpid(0, $status) != -1) {}
မှတ်ချက် - Paralallel အစီအစဉ်များကိုအမှန်တကယ် server ပတ်ဝန်းကျင်ဆိုင်ရာပြင်ဆင်မှုအရအဖြေများပြုလုပ်ရန်လိုအပ်သည်။
ဖိုင်စာရင်းကိုအသုတ်ပြီးနောက်၎င်းကိုစည်းလုံးညီညွတ်စွာလုပ်ဆောင်ပါ။ Rearave ည့်သည်များ နှင့်အတူ directory traversers များနှင့်အတူ code ကိုသပိတ်မှောက်မှုတိုးတက်အောင်။
ဥပမာ -
$directory = '/path/to/files';
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
foreach ($iterator as $file) {
if ($file->isFile()) {
echo "စာချုပ်စာတမ်း " . $file->getPathname() . " ၏ MD5 ဟုတ်ကဲ့:" . md5_file($file->getPathname()) . PHP_EOL;
}
}
အကယ်. MD5_File () ကို အဝေးမှဖိုင်၏ hash ကိုစစ်ဆေးရန်အသုံးပြုပါက (ဥပမာ -
$hash = md5_file('http://m66.net/path/to/file');
) ဖိုင်ကိုပထမ cache သို့ဒေါင်းလုဒ်ဒေါင်းလုဒ်ဒေါင်းလုပ်ဆွဲရန်အကြံပြုသည် MD5 ကိုတွက်ချက်ရန်အကြံပြုသည်။ ဝေးလံခေါင်ဖျားသောဖိုင်များသို့တိုက်ရိုက်ခေါ်ဆိုမှုများသည်ကွန်ယက် latency ကြောင့်စွမ်းဆောင်ရည်ညံ့ဖျင်းခြင်းသို့မဟုတ်ပျက်ကွက်ခြင်းပင်ဖြစ်စေနိုင်သည်။
MD5_File () သည် file hashings ကိုပိုမိုတွက်ချက်ရန်ထိရောက်စွာတွက်ချက်ရန်အစွမ်းထက်သောကိရိယာတစ်ခုဖြစ်သည်။
ဖိုင်အမြောက်အများကိုပြုပြင်သောအခါ cacheing ယန္တရားသည်မိတ္တူပွားတွက်ချက်မှုများကိုသိသိသာသာလျှော့ချပေးနိုင်ပြီးစွမ်းဆောင်ရည်ကိုတိုးတက်စေသည်။
Parallel တွက်ချက်ခြင်း, multi-you-threading နှင့်အခြားနည်းလမ်းများသည်စုစုပေါင်းအပြောင်းအလဲအတွက်အချိန်ကိုတိုစေနိုင်သည်။ သို့သော်၎င်းသည်ဆာဗာပတ်ဝန်းကျင်နှင့်တည်ငြိမ်မှုနှင့်ပေါင်းစပ်စဉ်းစားရန်လိုအပ်သည်။
လမ်းညွှန်ဖြတ်သန်းခြင်းနှင့်သုတ်ထုတ်ခြင်းဆိုင်ရာလမ်းညွှန်အသုံးပြုခြင်းကိုဆင်ခြင်တုံတရားအသုံးပြုခြင်းသည် code ကိုပိုမိုတိကျပြီးထိရောက်စေသည်။
MD5_File () ကို ဝေးလံခေါင်ဖျားသော URL များသို့တိုက်ရိုက်ခေါ်ဆိုခြင်းမပြုပါနှင့်။ ဖိုင်ကိုပထမ ဦး ဆုံး cache လုပ်ရန်အကြံပြုသည်။
အထက်ပါနည်းစနစ်များမှတဆင့် PHP developer များက System ၏စွမ်းဆောင်ရည်နှင့်တည်ငြိမ်မှုကိုသေချာစေရန်အတွက် MD5_File () ကို ပိုမိုထိရောက်စွာအသုံးပြုနိုင်သည်။
// အပြည့်အဝကုဒ်နမူနာ:cache ယန္တရား + လမ်းညွှန် taversal
$cacheFile = '/path/to/cache/md5_cache.json';
function getCachedMd5($file) {
global $cacheFile;
static $cache = null;
if ($cache === null) {
if (file_exists($cacheFile)) {
$cache = json_decode(file_get_contents($cacheFile), true);
} else {
$cache = [];
}
}
$modTime = filemtime($file);
if (isset($cache[$file]) && $cache[$file]['mtime'] === $modTime) {
return $cache[$file]['md5'];
}
$md5 = md5_file($file);
$cache[$file] = ['md5' => $md5, 'mtime' => $modTime];
file_put_contents($cacheFile, json_encode($cache));
return $md5;
}
$directory = '/path/to/files';
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory));
foreach ($iterator as $file) {
if ($file->isFile()) {
echo "စာချုပ်စာတမ်း " . $file->getPathname() . " ၏ MD5 ဟုတ်ကဲ့:" . getCachedMd5($file->getPathname()) . PHP_EOL;
}
}