检查互联网连接和DNS解析


check internet connect and DNS resolution

我知道以前可能有人问过这个问题,但是我找不到完全符合我具体要求的产品。

我正在本地Linux服务器上加载页面,当它加载时,我需要知道它运行的服务器是否有互联网接入和DNS解析。

我有这个工作,但是…如果没有互联网连接,页面需要很长时间才能加载,如果有连接,则立即加载。

我正在使用以下命令来检查互联网访问:

$check1 =  checkState('google-public-dns-a.google.com',53);
$check2 =  checkState('resolver1.opendns.com',53);
if ($check1 == "YES" || $check2 == "YES"){
    echo "Internet Available";
}

function checkState($site, $port) {
    $state = array("NO", "YES");
    $fp = @fsockopen($site, $port, $errno, $errstr, 2);
    if (!$fp) {
        return $state[0];
    } else  { 
        return $state[1];
    }
}

和使用

检查DNS解析
$nameToIP = gethostbyname('www.google.com');
if (preg_match('/^'d/', $nameToIP) === 1) {
   echo "DNS Resolves";
}
有谁能推荐一个更好的方法吗?因此,如果没有连接,页面不会长时间停滞。

谢谢

您可以使用fsockopen

下面的例子可以很好地告诉你是否连接到internet

function is_connected() {
    $connected = @fsockopen("www.google.com", 80); //website, port  (try 80 or 443)                                      
    if ($connected){
       fclose($connected);       
       return true;
    }
    return false;
}

参考:https://stackoverflow.com/a/4860432/2975952

检查DNS在这里解析

function is_site_alive(){
    $response = null;
    system("ping -c 1 google.com", $response);
    if($response == 0){
       return true;
    }
    return false;
}

参考:https://stackoverflow.com/a/4860429/2975952