使用Linux上的命令行PHP检查互联网连接

我在Linux上使用命令行PHP来打开蓝牙拨号连接,我需要一个快速的方法来检查互联网连接是否处于活动状态。 那么,不必肮脏,但快速表示赞赏。 :)使用exec来运行外部命令不是一个问题。

我想ping一些稳定的服务器(如谷歌),但我想知道是否有更好的方法。 也许检查输出的ifconfig ? 一个明确的响应(“无法连接到服务器”,“连接”)的命令自然是最好的。 想法?

如果你想要的东西不需要依赖外部服务器,你可以检查一个默认路由。 该命令将打印出默认路由的数量:

 /sbin/route -n | grep -c '^0\.0\.0\.0' 

如果它是0 ,你不能到达外面的世界。

如果你对使用exec很满意,我会(检查你的网络连接)ping你的ISP的DNS服务器(通过IP)

 exec("ping -c 1 $ip 2>&1", $output, $retval); 

您也可以使用fsockopen尝试从www.google.com获取一个页面(wget / curl'场景'),然后在纯PHP中执行此操作。

 if(!fsockopen("www.google.com", 80)) { echo "Could not open www.google.com, connection issues?"; } 

我建议使用ping也可以使用类似于:

 exec("ping -c 4 www.google.com", $output, $status); if ($status == 0) { // ping succeeded, we have connection working } else { // ping failed, no connection } 

如果你决定使用wget,记得在你要下载的页面的url前加上http://,并且建议在选项中加上“-q -O – ”来使wget不会(保存)保存到文件..

另一种方法是通过在PHP上使用curl / sockets,但是我认为这不是你正在寻找的最快捷的方式。

对于这样的事情,你可以使用wget来使用超时参数-W的外部网络。 如果超时没有成功,则返回1;如果超时,则返回0。 另外, ping可以用于这个目的,正如你所建议的那样。

网络连接? 那是什么? 请定义 “互联网连接”! 你想检查用户是否连接 – 到哪里? 到你公司的服务器? 那么,平! 还是去哪里? 正确的,平google.com,但与此,你只会检查用户的连接到谷歌的服务器,因为所有其他网站可能会被系统管理员禁止。

通常情况下,网络路由是一个这样的领域,你不能检查你是否连接到某种“互联网”。 你只能检查特定的服务器。