检查PHP是否可以访问端口

时间:2014-02-24 07:33:07

标签: php connection ports

我试图检查我服务器上的端口是否已打开,我有一些PHP来执行此操作

<?php    
$host = 'xxxxxxxxxxxxxxxxxxx';
    $ports = array(xxxxxx);

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

        if (is_resource($connection))
        {
            echo '<h2>' . $host . ':' . $port . ' ' . '(' . getservbyport($port, 'tcp') . ') is open.</h2>' . "\n";

            fclose($connection);
        }

        else
        {
            echo '<h2>' . $host . ':' . $port . ' is not responding.</h2>' . "\n";
        }
    }
    ?>

其中输出以下内容:

  

domain.zapto.org:80(http)已打开。   domain.zapto.org:8090不是。   响应。 domain.zapto.org:34134没有回复。

但是,如果我去domain.zapto.org:34134它工作正常....所以它是可以访问的,但为什么它说它不是?有任何想法吗?谢谢你们。

1 个答案:

答案 0 :(得分:1)

通过提供fsockopen函数附加参数为您的代码添加基本调试(请参阅manual

$host = 'theofilaktoshouse.zapto.org';
$ports = array(80, 8090, 34134);

foreach ($ports as $port)
{
    $errno  = null;
    $errstr = null;

    $connection = @fsockopen($host, $port, $errno, $errstr);

    if (is_resource($connection)) {
        echo '<h2>' . $host . ':' . $port . ' ' . '(' . getservbyport($port, 'tcp') . ') is open.</h2>' . "\n";
        fclose($connection);
    } else {
        echo "<h2>{$host}:{$port} is not responding. Error {$errno}: {$errstr} </h2>" . "\n";
    }
}

原因为什么它可能不起作用是您的主机设置的流量规则。他们可以轻松地禁止到80以外的端口的传出连接