更好和更简单的方法来检查Internet访问。 PHP Cronjob

时间:2018-10-21 01:13:58

标签: php sockets cron httpurlconnection ping

这是我的设置:

我正在使用树莓派3在家里运行cronjob。每1分钟,此cronjob执行一个php文件,该文件需要正常的Internet连接。为了检查互联网是否可以在我的家里正常工作(finicky互联网),我在文件开头修改并实现了以下功能:

function is_connected_true_false()
{
    $multiple_domains = array('www.example.com', 'www.google.com', 'www.bing.com');
    $random_domain_used = $multiple_domains[rand(0,2)];
    $connected = @fsockopen($random_domain_used, 80, $errno, $errstr, 10);
    if($connected) {
        $is_conn = true;
        fclose($connected);
    } else {
        $is_conn = false; //action in connection failure
        // Log error to the server
        //$errno; // Error #
        //$errstr; // Error as a string
    }
    return $is_conn;
}

到目前为止,该方法仍然有效,但是,我相信以后会遇到一些问题。

此cronjob每1分钟运行一次php文件!这是1440个网站每天的请求!从我家的IP。

我至少添加了3个不同的域,但我不想将我的IP列入黑名单。我选择这3个域是因为它们的可靠性和加载时间。

加载页面似乎也要花费一些时间(有时需要几秒钟,互联网有些挑剔...)。

通过打开整个网站而不是对8.8.8.8进行ping操作,可能会占用更高的带宽。

其他信息: php文件实质上是从其他网站获取信息。 致电x网站时,由于所需的超时值过长,我无法使用(返回码/退出状态)。否则,我会用它。

解决方案/改进?

我可以ping 8.8.8.8服务器或其他任何可靠的服务器,而不是完全加载网站来检查Internet是否可用吗? 如果是这样,怎么办?我能达到与当前功能相同的结果吗?

我尝试使用8.8.8.8代替网站域,但是它似乎不起作用。不知道为什么。

其他: 请记住,PHP爱好者在这里。尽管我做了一些研究,但是我对网络协议,TCP,HTTP,ICMP,程序包以及所有类似的东西一无所知,但是!

我获得代码的来源:Determine in php script if connected to internet?

编辑: -ochi建议我购买或租用主机/ VPS服务。这可能有效。但是,我相信有更好的方法。谢谢。

EDIT2: 我发现对服务器的ping使用的协议或端口与http请求使用的协议或端口不同,如何确保端口80正常工作?我是否应该在功能数组中添加更多网站以分散流量/请求?

1 个答案:

答案 0 :(得分:0)

我不用担心。谷歌快速搜索显示,谷歌声称每秒可提供4万次搜索。

此外,google,bing和所有其他巨头都使用循环DNS,这些IP指向负载均衡器,因此,即使您已本地缓存DNS信息,您仍应在每个给定服务器之间切换。

ivan@darkstar:~$ nslookup www.google.com
Server:     192.168.1.2
Address:    192.168.1.2#53

Non-authoritative answer:
Name:   www.google.com
Address: 74.125.141.99
Name:   www.google.com
Address: 74.125.141.106
Name:   www.google.com
Address: 74.125.141.147
Name:   www.google.com
Address: 74.125.141.103
Name:   www.google.com
Address: 74.125.141.105
Name:   www.google.com
Address: 74.125.141.104
Name:   www.google.com
Address: 2607:f8b0:400c:c06::67

就他们而言,每分钟您的1个请求甚至不是沧海一粟。