如果连接到互联网,在PHP脚本中确定?

Ste*_*eve 44 php internet-connection

如何从我的开发机器上运行的PHP脚本检查我是否连接到互联网?

我运行脚本使用wget下载一组文件(可能存在也可能不存在).如果我在没有连接的情况下尝试下载,wget会继续查看下一个认为该文件不存在的内容.

bla*_*d Ψ 79

<?php
function is_connected()
{
    $connected = @fsockopen("www.example.com", 80); 
                                        //website, port  (try 80 or 443)
    if ($connected){
        $is_conn = true; //action when connected
        fclose($connected);
    }else{
        $is_conn = false; //action in connection failure
    }
    return $is_conn;

}
?>
Run Code Online (Sandbox Code Playgroud)

  • +很好的答案是别人可能认为`[80 | 443]`会在任何端口之间切换...... :) (3认同)
  • 根据[this](https://www.quora.com/Downtime/What-is-the-most-reliable-website-in-terms-ofuptime)帖子,使用它可能很有意义example.com作为答案的“ www.some_domain.com”。 (2认同)

Gab*_*aru 9

你可以随时ping好'ol trusty google:

$response = null;
system("ping -c 1 google.com", $response);
if($response == 0)
{
    // this means you are connected
}
Run Code Online (Sandbox Code Playgroud)

  • 这是非常可靠的,但要记住"ICMP工作!= TCP工作"(防火墙,NAT和诸如此类的东西),甚至"TCP工作!= HTTP工作"(透明代理等). (6认同)

use*_*864 8

此代码在laravel 4.2 php框架中失败,内部服务器500错误:

<?php
     function is_connected()
     {
       $connected = @fsockopen("www.some_domain.com", 80); 
        //website, port  (try 80 or 443)
       if ($connected){
          $is_conn = true; //action when connected
          fclose($connected);
       }else{
         $is_conn = false; //action in connection failure
       }
      return $is_conn;
    }
?>
Run Code Online (Sandbox Code Playgroud)

我不想强调自己想出来,因此我尝试了这个代码,它对我有用:

function is_connected()
{
  $connected = fopen("http://www.google.com:80/","r");
  if($connected)
  {
     return true;
  } else {
   return false;
  }

} 
Run Code Online (Sandbox Code Playgroud)

请注意:这是基于与google.com的连接不太容易失败的假设.


hil*_*har 5

接受的答案对我不起作用。当互联网断开连接时,它会抛出一个 php 错误。所以我用它进行了一些修改,如下所示:

if(!$sock = @fsockopen('www.google.com', 80))
{
    echo 'Not Connected';
}
else
{
echo 'Connected';
}
Run Code Online (Sandbox Code Playgroud)