PHP Development တွင် MD5_File () MD5_File () သည် file content hash တန်ဖိုးများကိုထုတ်လုပ်ရန်အသုံးပြုသော function တစ်ခုဖြစ်သည်။ developer များသည်များသောအားဖြင့်ဖိုင်ပြောင်းလဲခြင်းသို့မဟုတ်ဖိုင်သမာဓိကိုအတည်ပြုရန်ရှိမရှိစစ်ဆေးရန်၎င်းကိုအသုံးပြုသည်။ သို့သော် developer များစွာသည်ဤလုပ်ဆောင်မှုကိုအသုံးပြုသောအခါ "နားမလည်နိုင်သော" ပြ problem နာတစ်ခုနှင့်ကြုံတွေ့ရချိန်တွင် MD5_File () ကို ကွဲပြားသော encoding ပတ် 0 န်းကျင်တွင်ရရှိသော hash တန်ဖိုးသည်ကွဲပြားခြားနားသည်။
ဒါကတန်ပြန်ပုံရပေမယ့်နောက်ကွယ်ကနည်းပညာပိုင်းဆိုင်ရာအကြောင်းပြချက်တွေရှိတယ်။ ဤဆောင်းပါးသည်ဤအခြေအနေသည် Encoding ၏ရှုထောင့်မှကြည့်ရှုရန်အဘယ်ကြောင့်ဖြစ်ပေါ်ကြောင်းလေ့လာလိမ့်မည်။
ပထမ ဦး စွာကျွန်ုပ်တို့သည် MD5_File ၏အနှစ်သာရကိုနားလည်ရန်လိုအပ်သည်။
$hash = md5_file('/path/to/file.txt');
ဤလုပ်ဆောင်ချက်သည်ဖိုင်တစ်ခုလုံး၏မူလ binary data များကိုဖတ်ပြီး၎င်း၏ MD5 တန်ဖိုးကိုတွက်ချက်သည်။ ထို့ကြောင့်၎င်းသည်လူသားဖတ်နိုင်သောစာသားထက်ဖိုင် byte အကြောင်းအရာကိုယ်တိုင်ကို အာရုံစိုက်သည်။
တစ်နည်းပြောရရင် MD5 Value သည်စာသားအတွင်းရှိ bytes အတွင်းရှိပြောင်းလဲမှုနှင့်အတူတူပင်ဖြစ်သည်ဆိုပါက MD5 တန်ဖိုးသည်ကွဲပြားခြားနားလိမ့်မည်။
သာမန်လူတစ် ဦး နားလည်မှုလွဲခြင်းကအကြောင်းအရာအတူတူပါပဲဆိုပါက MD5 တန်ဖိုးကိုရသင့်သည်။ တကယ်တော့:
UTF-8: 4 0xB8 0xB8 0xad တွင် "အလတ်စား" ဇာတ်ကောင်သည်သုံး bytes ဖြစ်သည်
GBK တွင်နှစ်က bytes 2 ခု - 0xD6 0xD0 ဖြစ်သည်
အကယ်. သင့်တွင်ဖိုင်တွဲတစ်ခုရှိပါက UTF-8 encoding နှင့်အခြားတစ်ခုမှာ "တရုတ်စမ်းသပ်မှု " ဟုပြောသောအခါ,
developer များမကြာခဏအယ်ဒီတာရှိ PHP သို့မဟုတ်စာသားဖိုင်များကိုမကြာခဏရေးသားလေ့ရှိသည်။ အကယ်. အယ်ဒီတာသည်၎င်းကို UTF-8 အဖြစ်သတ်မှတ်သည် (BOM နှင့်အတူဖြစ်စေ, မရှိ) သို့မဟုတ်၎င်းကို ANSI / GBK အဖြစ်သိမ်းဆည်းသည်သို့မဟုတ်၎င်းကို ANSI / GBK အဖြစ်သိမ်းဆည်းသည်။
ဥပမာအားဖြင့်, Windows Notepad တွင်ဖိုင်တစ်ခုကိုသိမ်းဆည်းခြင်းသည်ပုံမှန်အားဖြင့် Ansi encoding ဖြစ်သည်။ VS Code ကိုသိမ်းဆည်းနေစဉ်ပုံမှန်အားဖြင့် bom-လျော့နည်းသည်။ ဖိုင်တွဲနှစ်ခုပါ 0 င်သောအကြောင်းအရာများသည်အတူတူပင်ဖြစ်သော်လည်းအောက်ပါကုဒ်များမှတစ်ဆင့်ဖြစ်သည်။
echo md5_file('file-ansi.txt') . "\n";
echo md5_file('file-utf8.txt') . "\n";
ကွဲပြားခြားနားသော hash outputs မြင်လိမ့်မည်။
ကျွန်ုပ်တို့သည်အောက်ပါ PHP script ကို M66.net တွင်ဖြန့်ဝေသည်ဆိုပါစို့။
$file1 = 'https://m66.net/files/utf8.txt'; // UTF-8 ကုဒ်
$file2 = 'https://m66.net/files/gbk.txt'; // GBK ကုဒ်
echo 'UTF-8: ' . md5_file($file1) . "\n";
echo 'GBK: ' . md5_file($file2) . "\n";
Run ရလဒ်များသည် 2 ခု၏ MD5 တန်ဖိုးများကွဲပြားကြောင်းရှင်းရှင်းလင်းလင်းပြသလိမ့်မည်။
ပေါင်းစည်းထားသော encoding format - UTF-8 (BOM No Bom) ကိုအတင်းအဓမ္မအသုံးပြုထားသည့်တစ်ခုတည်းသော encoding format သည်စီမံကိန်းအတွင်းရှိတစ်ခုတည်းသော encoding format နှင့်အလွယ်ကူဆုံးနှင့်အထိရောက်ဆုံးနည်းလမ်းဖြစ်သည်။
ဖိုင်ကိုသိမ်းဆည်းခြင်းမပြုမီ encoding ကိုပြောင်းလဲခြင်း - ဖိုင်အကြောင်းအရာများကိုပေါင်းစည်းသည့်ပုံစံသို့ပြောင်းရန် Iconv သို့မဟုတ် MB_ConVert_encoding () ကဲ့သို့သောကိရိယာများကိုသုံးပါ။
ဥပမာအားဖြင့်:
$content = file_get_contents('file.txt');
$content = mb_convert_encoding($content, 'UTF-8', 'GBK');
file_put_contents('converted.txt', $content);
Editor Settings ကိုအတည်ပြုပါ - သင်အသုံးပြုနေသော ide သို့မဟုတ် text editor ကိုသင်အသုံးပြုနေကြောင်းသေချာအောင်လုပ်ပါ။
MD5_File () သည် ဖိုင်၏မူလ byte stream ပေါ်တွင်မူတည်သည်။ encoding ခြားနားချက်သည် 4 င်း၏တွက်ချက်မှုရလဒ်များကိုအကျိုးသက်ရောက်လိမ့်မည်။ ဤအချက်ကိုနားလည်ခြင်းသည်ဘာသာစကားမျိုးစုံနှင့်ပလက်ဖောင်းဖိုင်တွဲများနှင့်ဆက်ဆံရာတွင်အရေးပါသည်။ အမှန်တကယ်စီမံကိန်းများအနေဖြင့်အမြဲတမ်းဖိုင်မှတ်တမ်းများကိုအမြဲတမ်းသိမ်းဆည်းထားခြင်းက hash စိစစ်အတည်ပြုခြင်း၏ထိရောက်မှုကိုသေချာစေရန်အဓိကအတိုင်းအတာဖြစ်သည်။