如何解决[警告:fsockopen():无法连接]?

时间:2014-08-14 10:07:33

标签: php apache function web-hosting shared-hosting

我想在我的共享托管服务器上检查我的服务器 Ubuntu Server 14.04 LTS 是否在线。我的服务器有IP而不是域,但我的共享托管服务器有域。为此,我在共享托管服务器中使用以下代码来检查我的服务器是否在线。

<?php
$site = "XX.XX.XX.XX";
$port = 7550;
$fp = fsockopen($site,$port,$errno,$errstr,10);
if ($fp === false) { 
 print($errno." : ".$errstr); 
}  
if(!$fp)
{
echo "SERVER IS DOWN";
}
else
{
echo "SERVER IS UP ON PORT ".$port." AT ".$site;
fclose($fp);
}
?>

在我的共享托管服务器php文件中添加上述代码后,当我运行它时,我得到以下错误。

Warning: fsockopen(): unable to connect to XX.XX.XX.XX:7550 (Connection timed out) in /home/USERNAME/public_html/index.php on line 4 110 : Connection timed out SERVER IS DOWN

现在有人告诉我检查allow_url_fopen = On是否已在我的共享托管服务器中启用,然后我检查了我的共享托管服务器php.ini文件,并且它已打开。

现在我正在寻找周围的帮助然后其他人告诉我检查两者(我的共享托管服务器和我的服务器)是否有fsockopen() ON。然后我在php文件中编写了下面的代码并在两台服务器上运行。

<?php
$fp = fsockopen ("localhost", 80, $errno, $errstr, 10);
if (!$fp) {
echo "$errstr ($errno)
\n";
}else
{
echo "fsockopen Is Working Perfectly.";
}
fclose ($fp);
?>

在两台服务器上运行上面的.php文件后,我在两台服务器上得到了相同的结果。

fsockopen Is Working Perfectly.

重要说明:请记住,我的服务器IP保持活动状态,因为我在该IP上使用了很多PC,但我的服务器已关闭。我也可以使用代理在我的Web浏览器中打开http://XX.XX.XX.XX:7550

2 个答案:

答案 0 :(得分:3)

如果主机名不是有效域,则 fsockopen 会引发E_WARNING异常。因此,您使用带有PORT 离线的IP,然后该函数会抛出异常。

您可以通过处理异常或 @

来解决
$fp = @fsockopen($site,$port,$errno,$errstr,10);

如果您认为PORT在线,请检查防火墙并在检查后使用http://www.yougetsignal.com/tools/open-ports/等外部资源。

阅读http://php.net/manual/es/function.fsockopen.php

<强>更新: 您可以使用 socket_create 进行测试,这比fosockopen更好。

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
$connection =  @socket_connect($socket, 'XX.XX.XX.XX', 7550);

if( $connection ){
    echo 'ONLINE';
}
else {
    echo 'OFFLINE: ' . socket_strerror(socket_last_error( $socket ));
}

您必须设置有效的协议,请参阅:http://php.net/manual/es/function.socket-create.php

答案 1 :(得分:1)

如果用set set_error_handler()覆盖错误处理程序,则需要检查error_reporting()是否返回0,这意味着使用@来抑制错误。

set_error_handler('errorHandler');

function errorHandler($errno, $errstr, $errfile, $errline) {

    if (error_reporting() === 0) 
        return false;

    //handle error
    ...
}