【问题标题】:Better And Simpler Way To Check Internet Access. PHP Cronjob检查 Internet 访问的更好和更简单的方法。 PHP 定时任务
【发布时间】:2019-03-25 11:11:43
【问题描述】:

这是我的设置:

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

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 个域是因为它们的可靠性和加载时间。

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

打开整个网站而不是 ping 8.8.8.8 可能会增加带宽使用率。

附加信息: php 文件本质上是从其他网站提取信息。 由于需要长时间的超时值,我在调用 x 网站时无法使用(返回代码/退出状态)。否则,我会使用它。

解决方案/改进?

我可以 ping 8.8.8.8 服务器或任何其他可靠的服务器,而不是完全加载网站来检查互联网是否正常吗? 如果是这样,怎么做?我可以达到与当前函数相同的结果吗?

我试过 8.8.8.8 而不是网站域,但它似乎不起作用。不知道为什么。

其他: 请记住,这里的 PHP 爱好者。虽然我做了一些研究,但我对网络协议、TCP、HTTP、ICMP、包和所有这些好东西一无所知!

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

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

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

【问题讨论】:

  • 是的,cronjob 必须每分钟运行一次。它会记录我的互联网是否中断
  • 你的第二个问题:没有现实生活的后果,如果我的互联网关闭,网站无法运行或网站正常运行,服务器将记录当前功能。我看不出为主机/VPS 付费将如何教会我更好地理解新代码。我想如果我愿意,我可以花钱请人代我做。
  • 没有态度,答应了。我真的需要每分钟 1 次的频率。我相信可以毫无问题地保持这样的频率。我们是来寻找方法的。调转 ping 听起来不错,我要调查一下。虽然,它涉及另一台服务器,不是吗?不知道你为什么删除你的 cmets。 :(
  • 请阅读我们的How to Ask 页面以获取有关如何改进此问题的提示

标签: php sockets cron httpurlconnection ping


【解决方案1】:

我不会担心的。一个快速的谷歌搜索显示谷歌声称每秒提供 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 个请求甚至不是沧海一粟。

【讨论】:

    猜你喜欢
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 2017-04-25
    • 2011-06-14
    相关资源
    最近更新 更多