လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> GetHostbyamel ၏အမှားအယွင်းများကိုမည်သို့ကိုင်တွယ်ရမည်နည်း

GetHostbyamel ၏အမှားအယွင်းများကိုမည်သို့ကိုင်တွယ်ရမည်နည်း

gitbox 2025-05-28

PHP တွင် Gethostbyamel () function ကို hostname ၏ hostname ၏ IPv4 လိပ်စာများအားလုံးပါ 0 င်သည့်ခင်းကျင်းမှုတစ်ခုထည့်ရန်အသုံးပြုသည်။ ၎င်းသည်အချို့သောကွန်ယက်နှင့်သက်ဆိုင်သော script များ၌အထူးသဖြင့်ဒိုမိန်းအမည်များကိုမိတ်ဖက်များနှင့်နှိုင်းယှဉ်ပါကဖြစ်သည်။ သို့သော်၎င်းသည်ပြင်ပ DNS စနစ်ပေါ်တွင်မှီခိုသောကြောင့်၎င်းလုပ်ဆောင်မှုတွင်လည်းပျက်ကွက်မှုဖြစ်နိုင်သည်။ အကယ်. ၎င်းသည်၎င်း၏မှားယွင်းသောပြန်လာတန်ဖိုးကိုမှန်ကန်စွာကိုင်တွယ်လျှင်၎င်းသည် script ကို crash သို့မဟုတ်ခန့်မှန်းရခက်သောအပြုအမူများကိုဖြစ်ပေါ်စေနိုင်သည်။

1 ။ gethostbyamel ၏အခြေခံအသုံးပြုမှု

 $host = 'example.com';
$ipList = gethostbynamel($host);

ပုံမှန်အခြေအနေများတွင် ဒေါ်လာ Iplist သည် array တစ်ခုဖြစ်လိမ့်မည်။

 Array
(
    [0] => 93.184.216.34
)

သို့သော် resolution ပျက်ကွက်မှု (မမှန်ကန်သော hostname or dns မေးမြန်းခြင်းအချိန်ကုန်ခြင်း) ဖြစ်လျှင် GetHostbyamel () GetHostbyamel () သည် မှားယွင်းစွာ ပြန်လာလိမ့်မည်။

2 ။ အမှားပြန်လာတန်ဖိုးကိုအန္တရာယ်

အမှားပြန်လာတန်ဖိုးသည် မှားယွင်း သည်, ဆိုလိုသည်မှာသင်သည် array မဟုတ်ဘဲဤရလဒ်ကိုကိုင်တွယ်ရန်ကြိုးစားပါကအမှားတစ်ခုရလိမ့်မည်။

 foreach ($ipList as $ip) { // လှျင် $ipList ဟုတ်ကဲ့ false,ပွင့်လင်းလိမ့်မယ် warning
    echo $ip . PHP_EOL;
}

ဤကဲ့သို့သောအမှားမျိုးသည်အထူးသဖြင့်အမျိုးအစားစစ်ဆေးခြင်းမပြုသည့် script များဖြင့်တွေ့ရသည်။

3 ။ အကောင်းဆုံးအလေ့အကျင့်

သင်၏ code ကိုအားကောင်းစေရန်အတွက် Gethostbyamel () အမှားပြန်လာသောတန်ဖိုးများကိုကိုင်တွယ်ရန်အကောင်းဆုံးသောလုပ်ထုံးလုပ်နည်းများဖြစ်သည်။

1 ။ Type Check ကိုသုံးပါ

ပြန်လာတန်ဖိုးကို array တစ်ခုဖြစ်လိမ့်မည်ဟုဘယ်တော့မှမယူဆပါနှင့်။ ရလဒ်ကိုဆုံးဖြတ်ရန်အမြဲ is_array () ကို သုံးပါ။

 $host = 'gitbox.net';
$ipList = gethostbynamel($host);

if (is_array($ipList)) {
    foreach ($ipList as $ip) {
        echo "IP စကားပေြာဟော: $ip" . PHP_EOL;
    }
} else {
    echo "hostname ကိုရှာမရပါ: $host" . PHP_EOL;
}

2 ။ ပြန်လာတန်ဖိုးကိုမှတ်တမ်းတင်ပါ

DNS မေးမြန်းမှုပျက်ကွက်မှုအသေးစိတ်ကိုမှတ်တမ်းတင်ခြင်းကပြ problems နာများကိုနောက်မှပြ roject နာဖြေရှင်းရန်ကူညီနိုင်သည်။

 if (!is_array($ipList)) {
    error_log("DNS ခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ: $host", 3, '/var/log/php-dns-errors.log');
}

3 ။ အချိန်ကုန်ခြင်းနှင့်အရန်ကူးအစီအစဉ်ကိုသတ်မှတ်ပါ

PHP ၏ Gethostbyamel () function သည် function တွင်ထည့်သွင်းထားသောအချိန်ကုန်ဆုံးထိန်းချုပ်မှုမရှိပါ

 function fallback_dns_lookup($host) {
    $output = [];
    exec("dig +short $host", $output);
    return $output ?: false;
}

GetHostbyamel () မအောင်မြင်ပါကအခြား parsing နည်းလမ်းသို့အလိုအလျောက်ပြောင်းနိုင်သည်။

 $ipList = gethostbynamel($host);
if (!is_array($ipList)) {
    $ipList = fallback_dns_lookup($host);
}

4 ။ ပိုမိုခေတ်မီသော DNS Resolution function များကိုသုံးပါ

ဖြစ်နိုင်လျှင် dns_get_record () အစားပိုမိုချမ်းသာသောသတင်းအချက်အလက်များကိုထောက်ပံ့ပေးသော GetHostbyamel အစား () အစား DNS_GET_RECOCord () ကိုသုံးပါ။

 $records = dns_get_record('gitbox.net', DNS_A);
$ipList = array_column($records, 'ip');

if (!empty($ipList)) {
    foreach ($ipList as $ip) {
        echo "IP: $ip" . PHP_EOL;
    }
} else {
    echo "DNS စုံစမ်းမှုမအောင်မြင်ပါ" . PHP_EOL;
}

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

GetHostbyamel () သည် IP လိပ်စာများကိုလျင်မြန်စွာရရှိသောကိရိယာတစ်ခုဖြစ်သော်လည်း မှားယွင်းသော ပြန်လာရန်၎င်း၏အသွင်အပြင်လိုအပ်သည်မှာကျွန်ုပ်တို့သတိထားရမည်ဟုလိုအပ်သည်။ အမျိုးအစားစစ်ဆေးခြင်းကိုစစ်ဆေးခြင်းအားဖြင့်အမှားမှတ်တမ်းများ, အခြားရွေးချယ်စရာဖြေရှင်းနည်းများနှင့်ခေတ်သစ်လုပ်ဆောင်ချက်များ, code ၏အမှားသည်းခံမှုနှင့်ကြံ့ခိုင်မှုကိုသိသိသာသာတိုးတက်လာနိုင်သည်။

ကွန်ယက်ခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်ပတ်သက်သောပတ်ဝန်းကျင်တွင်ပြန်လာတန်ဖိုးကိုစစ်ဆေးခြင်းကိုလျစ်လျူမရှုပါနှင့်။ ရိုးရှင်းသော is_array () ချက်လက်မှတ်သည် Runtime အမှားများနှင့်စီးပွားရေးပြတ်တောက်မှုအန္တရာယ်များကိုရှောင်ရှားနိုင်သည်။