Muh*_*san 4 php apache web-hosting shared-hosting function
我想检查我的服务器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);
}
?>
Run Code Online (Sandbox Code Playgroud)
在我的共享托管服务器 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()打开。然后我在一个 php 文件中编写了以下代码并在两台服务器上运行。
<?php
$fp = fsockopen ("localhost", 80, $errno, $errstr, 10);
if (!$fp) {
echo "$errstr ($errno)
\n";
}else
{
echo "fsockopen Is Working Perfectly.";
}
fclose ($fp);
?>
Run Code Online (Sandbox Code Playgroud)
在两台服务器上运行上述 .php 文件后,我在两台服务器上都得到了相同的结果。
fsockopen Is Working Perfectly.
重要说明:请记住,我的服务器 IP 保持活动状态,因为我在该 IP 上使用了许多 PC,但我的服务器已关闭。我也可以http://XX.XX.XX.XX:7550使用代理在我的网络浏览器中打开。
因为如果主机名不是有效域,则会fsockopen引发E_WARNING异常。因此,您使用带有 PORT离线的 IP,然后该函数会引发异常。
您可以通过处理异常或@来解决:
$fp = @fsockopen($site,$port,$errno,$errstr,10);
Run Code Online (Sandbox Code Playgroud)
如果您认为您的 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 ));
}
Run Code Online (Sandbox Code Playgroud)
您必须设置有效的协议,请参阅:http : //php.net/manual/es/function.socket-create.php。