PHP တွင် Gethostbyamel () function ကို hostname ၏ hostname ၏ IPv4 လိပ်စာများအားလုံးပါ 0 င်သည့်ခင်းကျင်းမှုတစ်ခုထည့်ရန်အသုံးပြုသည်။ ၎င်းသည်အချို့သောကွန်ယက်နှင့်သက်ဆိုင်သော script များ၌အထူးသဖြင့်ဒိုမိန်းအမည်များကိုမိတ်ဖက်များနှင့်နှိုင်းယှဉ်ပါကဖြစ်သည်။ သို့သော်၎င်းသည်ပြင်ပ DNS စနစ်ပေါ်တွင်မှီခိုသောကြောင့်၎င်းလုပ်ဆောင်မှုတွင်လည်းပျက်ကွက်မှုဖြစ်နိုင်သည်။ အကယ်. ၎င်းသည်၎င်း၏မှားယွင်းသောပြန်လာတန်ဖိုးကိုမှန်ကန်စွာကိုင်တွယ်လျှင်၎င်းသည် script ကို crash သို့မဟုတ်ခန့်မှန်းရခက်သောအပြုအမူများကိုဖြစ်ပေါ်စေနိုင်သည်။
$host = 'example.com';
$ipList = gethostbynamel($host);
ပုံမှန်အခြေအနေများတွင် ဒေါ်လာ Iplist သည် array တစ်ခုဖြစ်လိမ့်မည်။
Array
(
[0] => 93.184.216.34
)
သို့သော် resolution ပျက်ကွက်မှု (မမှန်ကန်သော hostname or dns မေးမြန်းခြင်းအချိန်ကုန်ခြင်း) ဖြစ်လျှင် GetHostbyamel () GetHostbyamel () သည် မှားယွင်းစွာ ပြန်လာလိမ့်မည်။
အမှားပြန်လာတန်ဖိုးသည် မှားယွင်း သည်, ဆိုလိုသည်မှာသင်သည် array မဟုတ်ဘဲဤရလဒ်ကိုကိုင်တွယ်ရန်ကြိုးစားပါကအမှားတစ်ခုရလိမ့်မည်။
foreach ($ipList as $ip) { // လှျင် $ipList ဟုတ်ကဲ့ false,ပွင့်လင်းလိမ့်မယ် warning
echo $ip . PHP_EOL;
}
ဤကဲ့သို့သောအမှားမျိုးသည်အထူးသဖြင့်အမျိုးအစားစစ်ဆေးခြင်းမပြုသည့် script များဖြင့်တွေ့ရသည်။
သင်၏ code ကိုအားကောင်းစေရန်အတွက် Gethostbyamel () အမှားပြန်လာသောတန်ဖိုးများကိုကိုင်တွယ်ရန်အကောင်းဆုံးသောလုပ်ထုံးလုပ်နည်းများဖြစ်သည်။
ပြန်လာတန်ဖိုးကို 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;
}
DNS မေးမြန်းမှုပျက်ကွက်မှုအသေးစိတ်ကိုမှတ်တမ်းတင်ခြင်းကပြ problems နာများကိုနောက်မှပြ roject နာဖြေရှင်းရန်ကူညီနိုင်သည်။
if (!is_array($ipList)) {
error_log("DNS ခွဲခြမ်းစိတ်ဖြာခြင်းမအောင်မြင်ပါ: $host", 3, '/var/log/php-dns-errors.log');
}
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);
}
ဖြစ်နိုင်လျှင် 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;
}
GetHostbyamel () သည် IP လိပ်စာများကိုလျင်မြန်စွာရရှိသောကိရိယာတစ်ခုဖြစ်သော်လည်း မှားယွင်းသော ပြန်လာရန်၎င်း၏အသွင်အပြင်လိုအပ်သည်မှာကျွန်ုပ်တို့သတိထားရမည်ဟုလိုအပ်သည်။ အမျိုးအစားစစ်ဆေးခြင်းကိုစစ်ဆေးခြင်းအားဖြင့်အမှားမှတ်တမ်းများ, အခြားရွေးချယ်စရာဖြေရှင်းနည်းများနှင့်ခေတ်သစ်လုပ်ဆောင်ချက်များ, code ၏အမှားသည်းခံမှုနှင့်ကြံ့ခိုင်မှုကိုသိသိသာသာတိုးတက်လာနိုင်သည်။
ကွန်ယက်ခွဲခြမ်းစိတ်ဖြာခြင်းနှင့်ပတ်သက်သောပတ်ဝန်းကျင်တွင်ပြန်လာတန်ဖိုးကိုစစ်ဆေးခြင်းကိုလျစ်လျူမရှုပါနှင့်။ ရိုးရှင်းသော is_array () ချက်လက်မှတ်သည် Runtime အမှားများနှင့်စီးပွားရေးပြတ်တောက်မှုအန္တရာယ်များကိုရှောင်ရှားနိုင်သည်။