我想在我的共享托管服务器上检查我的服务器 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
。
答案 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
...
}