PHP效率ping阵列机器

时间:2015-09-21 21:05:33

标签: php ping

我正在通过ip address对12台计算机的数组进行ping操作,并在简单的Web界面上显示状态(主机是否处于活动状态)。 这是我目前的代码 -

$hosts = array ("192.168.0.100","192.168.0.101","192.168.0.102"); //etc.. 

foreach ($hosts as $hosts) {
    exec ("ping -i 1 -n 2 -l 1 $hosts", $ping_output);
    if(preg_match("/Reply/", $ping_output[2])) {
        echo "$hosts replied! <br />";
    } else {
        echo "$hosts did not reply! <br />";
    }
}

这有效,但不能很好地扩展。我必须在页面加载前等待大约15秒,因为它会ping所有计算机并需要时间。我将ping计数减少到只有2个回复,同时降低了缓冲区大小。

有更好的方法吗?更高效?超过15秒? 任何建议表示赞赏。

由于

1 个答案:

答案 0 :(得分:3)

PHP不会成为这里的缓慢部分,系统$('.cp-play').one("click", function(){ //Code stuff } 命令将是。考虑所有主机都处于脱机状态的最坏情况。您将获得TTL * NumHosts的最短等待时间。

更好的解决方案是运行后台进程,每隔X秒ping主机并更新某种状态标记(平面文件,数据库表等)。向外的页面将立即读取这些状态标记,并且信息永远不会超过X秒。这还有一个额外的好处,可以通过限制发生的ping数量来减少服务器和目标主机的压力。

如果该设置不是一个可行的选项,最好的办法是摆弄ping选项或找到不同的工具。