港口没有响应但工作?

时间:2016-05-11 22:50:34

标签: php port

所以我试图做一个管理面板,并显示所有不同服务的状态。

为了实现这一点,我使用一个函数来查看端口是否响应。

以下是代码:

public function getPort($ports, $host = NULL) {

    if (!$host) { $host = "somesite.com"; }

    $ports = array($ports);

    foreach ($ports as $port) {
        $connection = @fsockopen($host, $port);

        if (is_resource($connection)) {
            return "<span class=\"label label-success\">Online</span>";
            fclose($connection);
        } else {
            return "<span class=\"label label-danger\">Offline</span>";
        }
    }
}

端口80和21的端口显示为在线但不是像3306 for MySQL或9987这样的端口。有没有办法让我首先检查为什么它是这样然后也解决这个问题,以便它显示为在线?

1 个答案:

答案 0 :(得分:1)

默认情况下,MySQL的3306端口仅在本地IP地址 - 127.0.0.1上可用,因此如果您从机器外部测试端口,它将显示为已关闭。

如果要监控来自其他计算机的服务,请确保您的防火墙允许这样做,并确保您的服务正在侦听全局IP地址,而不是127.0.0.1(您可以执行简单的netstat -an |grep LISTEN来验证)。