检查主机是否与PHP联机?

时间:2009-11-08 12:09:49

标签: php function internet-connection

我的互联网连接遇到了一些问题,我想知道检查主机是否连接到互联网的最快,最无差错和最可靠的方法是什么。

我正在寻找像is_online()这样的东西,在线时返回true,不在时返回false。

4 个答案:

答案 0 :(得分:6)

我已经对一些解决方案进行了基准测试:file_get_contents与HEAD请求,gethostbynamelcheckdnsrr以及以下解决方案似乎比其他解决方案快100多倍:

function is_online()
{
    return (checkdnsrr('google.com', 'ANY') && checkdnsrr('yahoo.com', 'ANY') && checkdnsrr('microsoft.com', 'ANY'));
}

每个主机大约需要1微秒,而file_get_contents每个主机需要超过1秒(离线时)。

答案 1 :(得分:2)

您可以向可能已启动的主机(例如Google)发送ping。

似乎没有内置PHP,因此您必须使用shell命令。 ping的返回值可以告诉您是否收到了回复。

更新ping -c1 -q -w1应该是Linux上正确的命令。如果收到回复,这将为您提供退出代码0,否则为其他内容,并在一秒钟后超时。

因此,这样的事情(警告,我的PHP生锈)应该可以解决这个问题:

function is_online() {
    $retval = 0;
    system("ping -c1 -q -w1", $retval);
    return $retval == 0;
}

答案 2 :(得分:1)

为什么不在热门网站上执行大量HTTP GET(或更好的HTTP HEAD速度)请求?使用多数投票来决定答案。

有时依赖ping(通过PHP中的系统调用),但请注意并非所有网站都响应ICMP(ping)请求。

注意通过在得出结论之前增加ping / http请求的数量有助于答案的置信度,但不能< / em>在最糟糕的情况下没有错误。

答案 3 :(得分:0)

不要忘记这假设您的服务器将响应ICMP请求。如果是这样,那么我同意,Net_Ping可能就是这样。如果你没有使用Net_Socket软件包,也可以在PEAR上尝试连接到你知道会得到响应的某个端口 - 可能是端口7或端口80,具体取决于你运行的服务。