【发布时间】: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