လက်ရှိတည်နေရာ: ပင်မစာမျက်နှာ> နောက်ဆုံးရဆောင်းပါးများစာရင်း> PHP GetOhostbyname သည် IPv6 ပတ် 0 န်းကျင်တွင်သဟဇာတဖြစ်ပါသလား။ အဘယ်ပြ problems နာများနှင့်ဖြေရှင်းချက်များရှိသနည်း

PHP GetOhostbyname သည် IPv6 ပတ် 0 န်းကျင်တွင်သဟဇာတဖြစ်ပါသလား။ အဘယ်ပြ problems နာများနှင့်ဖြေရှင်းချက်များရှိသနည်း

gitbox 2025-06-10

PHP တွင် Gethostbyname function သည် IPv4 လိပ်စာများသို့ hostnames များကိုဖြေရှင်းရန်အသုံးပြုသောအသုံးများသောနည်းလမ်းဖြစ်သည်။ ၎င်း၏ပုံမှန်အသုံးပြုမှုသည်အလွန်ရိုးရှင်းပါသည်။

 <?php
$ip = gethostbyname("example.com");
echo $ip;
?>

သို့သော်ကွန်ယက်ပတ် 0 န်းကျင်သည် IPv6 ကိုတဖြည်းဖြည်းပြောင်းရွှေ့လာသောအခါ developer များစွာသည်စိုးရိမ်ပူပန် သူများ နှင့်သက်ဆိုင်လိမ့်မည်။ IPv6 လိပ်စာများကိုခွဲခြမ်းစိတ်ဖြာခြင်းကိုအထောက်အကူပြုပါသလား။ အလားအလာရှိသောပြ problems နာများရှိပါသလား ဘယ်လိုဖြေရှင်းမလဲ

GetHostbyname ၏လုပ်ငန်းယန္တရားသည် IPv6 နှင့်သဟဇာတဖြစ်သည်

GetHostbyname function သည်ရိုးရာ IPv4 ဒီဇိုင်းအပေါ်အခြေခံသည်။ ၎င်း၏အဓိကလုပ်ဆောင်ချက်မှာ host name နှင့်သက်ဆိုင်သောပထမဆုံး IPv4 လိပ်စာ string ကိုပြန်ပို့ရန်ဖြစ်သည်။ အကယ်. query host တွင် IPv4 လိပ်စာမရှိပါက IPv6 လိပ်စာတစ်ခုသာတည်ရှိပါက GethostbyName သည် ပုံမှန်အားဖြင့်တရားဝင် IP ကိုမပြန်နိုင်ပါ။

ရိုးရိုးလေးပါ

  • IPv4 လိပ်စာ resolution ကိုသာထောက်ပံ့သည်။

  • IPv6 လိပ်စာများကိုမထောက်ပံ့ပါ။

  • အိမ်ရှင်အမည်ကို IPv6 လိပ်စာသို့သာခွဲပါကပြန်လာသောရလဒ်မှာများသောအားဖြင့်အိမ်ရှင်အမည်ကိုယ်တိုင်ဖြစ်သည်။

နမူနာကုဒ်:

 <?php
$ip = gethostbyname("ipv6only.example.com");
echo $ip; // ဖြစ်နိုင်သော output ကို“ipv6only.example.com”,အစား IP စကားပေြာဟော
?>

၎င်းသည် IPv6 ပတ်ဝန်းကျင်တွင် GetHostbyName သည် အကန့်အသတ်ဖြင့်သာရှိသည်ကိုပြသသည်။

လက်ရှိပြ problems နာများ

  1. IPv6 လိပ်စာမရနိုင်ပါ
    GetHostbyname သည် IPv4 လိပ်စာကိုသာပြန်လည်ပေးပြီး AAAA မှတ်တမ်းများ, iPv6 လိပ်စာများကိုမပြုပြင်နိုင်ပါ။

  2. မလုံလောက်မှုမလုံလောက် <br> ခေတ်သစ်ကွန်ယက်များတွင်ဆာဗာများပိုမိုများပြားလာသည်။ IPv6 လိပ်စာများကိုသာအသုံးပြုသည်။ GetosostbyName သည် လိုအပ်ချက်များကိုဖြည့်ဆည်းပေးနိုင်သည်။

  3. အလားအလာအမှား အကယ်. ဤအစီအစဉ်သည် GetHostbyname ကို တရားဝင် IP ရရှိရန်အတွက်မှီခိုနေပါက IPv6 Host နှင့်ကြုံတွေ့ရသည့်အခါအမှားသို့မဟုတ်ယုတ္တိရှိသောခြွင်းချက်တစ်ခုဖြစ်ပေါ်စေနိုင်သည်။

အဖေြ

IPv6 နှင့်သဟဇာတဖြစ်ရန် PHP 7+ မှပေးထားသော DNS_GET_RECORDRECord သို့မဟုတ် GetAddrinfo function ကဲ့သို့သောခေတ်မီလုပ်ဆောင်ချက်များကိုအသုံးပြုရန်အကြံပြုသည်

Method 1: DNS_GEGET_RECORD ကို သုံးပါ

 <?php
$hostname = "example.com";

// အားလုံးရယူပါ A နှင့် AAAA စံချိန်
$records = dns_get_record($hostname, DNS_A + DNS_AAAA);

$ipv4s = [];
$ipv6s = [];

foreach ($records as $record) {
    if ($record['type'] === 'A') {
        $ipv4s[] = $record['ip'];
    } elseif ($record['type'] === 'AAAA') {
        $ipv6s[] = $record['ipv6'];
    }
}

echo "IPv4 addresses:\n";
print_r($ipv4s);

echo "IPv6 addresses:\n";
print_r($ipv6s);
?>

ဤနည်းလမ်းသည် IPv4 နှင့် IPv6 လိပ်စာများအားလုံးကိုအိမ်ရှင်အမည်နှင့်တစ်ချိန်တည်းတွင် 0 ယ်နိုင်သည်။

နည်းလမ်း 2. GetAddrinfo function ကိုသုံးပါ (PHP 7.0+)

PHP 7.0 နောက်ပိုင်းတွင် Socket_getDDRinDFO ကို SocketDDDRinDFO ကို SocketSDDFO တွင်မိတ်ဆက်ပေးပြီးနောက်လိပ်စာအချက်အလက်များကိုထပ်မံဖြည့်ဆည်းပေးနိုင်ပြီး IPv4 နှင့် IPv6 ကိုထောက်ပံ့နိုင်သည်။

 <?php
$hostname = "example.com";
$results = socket_getaddrinfo($hostname, null);

foreach ($results as $result) {
    $ip = $result['address'];
    echo "IP: $ip\n";
}
?>

ဤနည်းလမ်းသည် socket extensions များတပ်ဆင်ခြင်းနှင့် IPv6 လိပ်စာများကိုထောက်ပံ့သည်။

နည်းလမ်း 3 - connection ကို stream_socket_client ဖြင့်ပေါင်းစပ်ပါ

အမှန်တကယ်ကွန်ယက်ပရိုဂရမ်များ၌ connection များနှင့် IPv4 နှင့် IPv6 ကိုထောက်ပံ့ရန် stream_socket_clies ကိုလည်းသုံးနိုင်သည်။

 <?php
$hostname = "example.com";
$port = 80;
$errno = 0;
$errstr = "";

$fp = @stream_socket_client("tcp://$hostname:$port", $errno, $errstr, 5);

if ($fp) {
    $meta = stream_socket_get_name($fp, false);
    echo "Connected via IP: $meta\n";
    fclose($fp);
} else {
    echo "Failed to connect: $errstr ($errno)\n";
}
?>

ဤနည်းလမ်းသည်အခြေခံကွန်ယက် stack မှတဆင့်သင့်လျော်သော IP (IPv4 သို့မဟုတ် IPv6) ကိုအလိုအလျောက်ရွေးချယ်သည်။

အကျဉ်းချုပ်

  • GetHostbyName သည် IPv4 လိပ်စာများကိုသာခွဲခြမ်းစိတ်ဖြာနိုင်ပြီး IPv6 ကိုမထောက်ပံ့ပါ။ တဖြည်းဖြည်းခေတ်နောက်ကျသောနည်းလမ်းအဖြစ်မှတ်ယူခဲ့သည်။

  • IPv6 ပတ် 0 န်းကျင်တွင် GetHostbyName သည် ပျက်ကွက်ခြင်းသို့မဟုတ်မမှန်ကန်ကြောင်းရလဒ်များကိုပြန်ပို့ရန်ဖြစ်နိုင်သည်။

  • IPv4 နှင့် IPv6 လိပ်စာများရရှိရန် DNS_GET_RECOCord သို့မဟုတ် Socket_etaddrinfo ကဲ့သို့သောခေတ်သစ်နည်းများကိုအသုံးပြုရန်အကြံပြုသည်။

  • ကွန်ယက်ချိတ်ဆက်မှုများအတွက် IPv6 ကိုထောက်ပံ့ရန် IPv6 ကိုထောက်ပံ့ရန် IPv6 ကိုထောက်ပံ့ရန်အတွက် Code Network ပတ် 0 န်းကျင်နှင့်လိုက်ဖက်သည်။