PHP Socket超时连接检查

问题描述:

我是PHP的新手,所以我想知道是否有人可以帮助我。PHP Socket超时连接检查

我用很多工作做了一个脚本,即使很艰难,它也很容易,但我只是吮吸。

但是,如果我的网站是开启的,这个脚本就会显示它。

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

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

谢谢柠多

(我已搜索周围堆栈溢出了很多的解决方案,这一点,所有的答案,我发现不清或者不是为我工作。)

<?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"; 
    } 
} 
?> 
+0

查看文档http://php.net/fsockopen密切关注$ timeout – Maerlyn 2014-12-05 14:55:03

你可以通过传递$errno

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

侧面说明,并$errstr你现在可以retrie:定义在5th argument of the fsockopen function的最大超时ve和随后输出多一点点的细节在你的错误:

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

Thx兄弟:D,$ errno是什么?我应该添加该变量还是? – NubGuy 2014-12-05 14:55:28

+0

如果有任何错误或麻烦,'$ errno'和'$ errstr'实际上会被传递给函数,作为由'fsockopen'填充的引用。您可以稍后再回显这些内容,以提供更多关于_why_连接失败的描述性信息! – sjagr 2014-12-05 14:56:31

+0

Nvm thx花花公子像一个魅力:D – NubGuy 2014-12-05 14:57:07

有一个快速浏览一下documentation,你会看到:参数5,float $timeout,是能够做到这一点。

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