代码之家  ›  专栏  ›  技术社区  ›  Ilari Kajaste

在Linux上使用命令行PHP检查Internet连接

  •  2
  • Ilari Kajaste  · 技术社区  · 15 年前

    我在Linux上使用命令行php来打开蓝牙拨号连接,我需要一种快速而不肮脏的方式来检查Internet连接是否处于活动状态。好吧,不必弄脏,但最好快点。:)使用 exec 运行外部命令不是问题。

    我正在考虑Ping一些稳定的服务器(如Google),但我想知道是否有更好的方法。可能检查的输出 ifconfig ?如果一个命令能够以明确的响应作出响应,例如(“无法连接到服务器”、“已连接”),自然是最好的。思想?

    5 回复  |  直到 15 年前
        1
  •  10
  •   caf    15 年前

    如果您想要在不依赖外部服务器的情况下工作,可以检查默认路由。此命令将打印出默认路由数:

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

    如果是 0 你不能去外面的世界。

        2
  •  5
  •   ChristopheD    15 年前

    如果您愿意使用exec,我会(检查您的互联网连接)ping您的ISP的DNS服务器(通过IP)

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

    您也可以使用纯PHP fsockopen 尝试从www.google.com(wget/curl“scenario”)获取页面。

    if(!fsockopen("www.google.com", 80)) {
        echo "Could not open www.google.com, connection issues?";
    }  
    
        3
  •  3
  •   redShadow    15 年前

    我建议使用 发出砰的声响 也是……您可以使用如下内容:

    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,但我认为这不是您要寻找的最快的方法。

        4
  •  2
  •   igustin    15 年前

    你可以使用 WGET 到某个外部网站 超时 参数-w。如果超时未成功,则返回1;如果在超时内,则返回0。也, 发出砰的声响 可用于您建议的用途。

        5
  •  0
  •   P Shved    15 年前

    互联网连接?这是什么?拜托, 定义 “互联网连接”!您想检查用户是否已连接到哪里?到你公司的服务器?嗯,平!还是去哪里?很好,ping google.com,但是你只需要检查用户是否连接到了google的服务器,因为系统管理员可能会禁止所有其他站点。

    一般来说,网络路由就是这样一个域,你无法检查你是否连接到了某种“互联网”。您只能检查特定的服务器。