【问题标题】:PHP Socket timeout connection checkPHP Socket 超时连接检查
【发布时间】:2014-12-05 14:50:01
【问题描述】:

我是 PHP 的新手,所以我想知道是否有人可以帮助我。

我用大量的工作制作了一个脚本,即使很艰难,它真的很容易,但我就是很烂。

但是,是的,如果我的网站已打开,则此脚本会显示它。

但如果它没有加载,它需要一百万小时才能说出来。

如何设置脚本的最长时间?

非常感谢

(我在 Stack Overflow 上搜索了很多解决方案,但我发现的所有答案都不清楚或不适合我。)

    <?php
$host = '127.0.0.1';
$ports = array(3000, 80);

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

    if (is_resource($connection))
    {
        if($port == 80)
        {
        echo "web: ONLINE";
        }

       if($port == 3000)
        {
        echo 'client: ONLINE';
        }

        fclose($connection);
    }

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

【问题讨论】:

标签: php sockets


【解决方案1】:

快速查看documentation,您会发现:参数5,float $timeout,能够做到这一点。

您还应该检查$connection 是否为false。如果您的超时已到,或者发生任何其他错误,就会发生这种情况。

【讨论】:

    【解决方案2】:

    您可以在5th argument of the fsockopen function中定义最大超时时间:

    $connection = @fsockopen($host, $port, $errno, $errstr, 10); // timeout at 10 seconds
    

    旁注,通过传递$errno$errstr,您现在可以检索并随后在错误中输出更多细节:

    echo '<h2>' . $host . ':' . $port . ' is not responding.</h2>' . "\r\n";
    echo '<p>Error Number ' . $errno . ': ' . $errstr . '</p>'."\r\n";
    

    【讨论】:

    • 谢谢老兄:D,$errno 是什么?我也应该添加那个变量吗?
    • $errno$errstr 实际上是作为引用传递给函数的,如果有任何错误或问题,则由fsockopen 填写。您可以稍后将这些内容回显,以提供关于为什么连接失败的更多描述性消息!
    • @NubGuy 没问题!请确保您将最能帮助您的答案标记为已接受。可以通过单击答案的向下/向上投票箭头正下方的“复选标记”来完成。也欢迎来到 SO。
    • 我是这个论坛的新手,如果我得到了,我需要 15rep,我会
    • @NubGuy 您将接受答案与投票混淆了。接受答案只有 15 分钟的时间限制,您现在应该可以了。 See this meta answer了解更多信息!
    猜你喜欢
    • 2017-09-08
    • 1970-01-01
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-16
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多