【问题标题】:See if a server is listening on a port in PHP?查看服务器是否正在侦听 PHP 中的端口?
【发布时间】:2014-04-25 18:17:44
【问题描述】:

在回答之前,请注意我对 PHP 完全陌生。我听说它很强大。

我想要做的是在我的(Apache 2)网络服务器上有一个页面,当用户单击页面上的按钮时,服务器将检查端口是否在其自己的 IP 上运行,并带有预设端口对于每个按钮,我想要多个具有相同 IP 但不同端口的按钮被 ping。

例子:

  • 点击按钮 1(泰拉瑞亚服务器),服务器 ping 127.0.0.1:7777 并告诉用户它是否得到响应。

  • 按钮 2(Minecraft 服务器)被点击,服务器 ping 127.0.0.1:25565 并告诉用户等。

我已经安装并运行了 PHP,我只需要一些代码 :)

【问题讨论】:

  • 在端口上打开一个套接字(有数十亿的谷歌结果),如果你能打开这个套接字,你就知道端口正在运行。请注意,如果您这样做太多,某些服务(例如 IMAP IIRC)会禁止您(“为什么这个 IP 开始与我对话而不说什么?!”)
  • @h2ooooooo 好吧,我正在家用计算机上运行服务器,我不希望有太多流量,所以这就是为什么。我将使用它在不同的端口上 ping 自己。不是另一台服务器。它完全是本地的。

标签: php apache port


【解决方案1】:

尝试连接端口并返回结果:

 <?php
     function Connect($port) {
        $serverConn = @stream_socket_client("tcp://127.0.0.1:{$port}", $errno, $errstr);
        if ($errstr != '') {
            return false;
        }
       fclose($serverConn);
       return true;
      } 


    if(isset($_POST['portTest'])){
       switch ($_POST['portTest']){
           case 'minecraft': $port= '25565';
        break;
           case 'Terraria': $port= '7777';
        break;  
           default: exit;
       }
     if (Connect($port)){
         echo "Server is running!";
       }else{
         echo "Server is down";
       }
    }
    ?> 

    <form method="POST">
    <input type="submit" name="portTest" value="minecraft">
    <input type="submit" name="portTest" value="Terraria">
    </form>

【讨论】:

  • 嗨,感谢您的回答,它按我想要的方式工作:D 我只是想问一下,有没有办法缩短超时时间?我找不到明显的方法。只是如果服务器宕机了,页面会刷新15-20秒左右,这不是很好。
  • 是的,第 4 个参数是超时时间,所以@stream_socket_client("tcp://127.0.0.1:$port", $errno, $errstr,5); 会给出 5 秒的超时时间
猜你喜欢
  • 2011-02-19
  • 2012-04-07
  • 2015-08-28
  • 2019-01-03
  • 1970-01-01
  • 1970-01-01
  • 2017-02-15
  • 2015-07-08
  • 2023-03-12
相关资源
最近更新 更多