2

我目前正在使用以下 php 代码检查服务器(在本例中为 192.168.1.135)是否在线:

<?php 
$fp = fsockopen("192.168.1.135", 443, $errno, $errstr, 0.4); //(line 47)
if (!$fp) {
  echo "OFFLINE";
}
else{
 echo "ONLINE";
}
?>

我使用 XAMPP 在我自己的服务器 192.168.1.130 上有此代码(当然在 LAN 上)

因此,如果此服务器处于脱机状态,则输出将是:

Warning: fsockopen(): in C:\xampp\htdocs\index.php on line 47
OFFLINE

它应该只是“离线”。如何在没有警告的情况下仅显示 OFFLINE?

我认为 XAMPP 会在服务器关闭时向我发送警告。但我应该怎么做才能不显示警告?我在 XAMPP 中找不到此设置,有人知道吗?

如果不是,即使服务器关闭(离线),我应该如何正确处理第 47 行?

当服务器在线时,这将完美地工作。

4

2 回答 2

5

使用静默运算符 @来抑制警告:

$fp = @fsockopen("192.168.1.135", 443, $errno, $errstr, 0.4); //(line 47)

旁注:如您所见,@操作员按您的要求取消了警告。不过要小心。诸如“没有到主机的路由”之类的消息也将被抑制。(大多数情况下,如果您的网络连接不可用)因此您无法确定服务器是否处于脱机状态。$errmsg如果fsockopen()看不到原因,您应该另外输出。

于 2013-03-31T19:00:20.107 回答
1

试试这个脚本

$fp = fsockopen("192.168.1.135", 443, $errno, $errstr, 0.4);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: 192.168.1.135\r\n";
    $out .= "Connection: Close\r\n\r\n";
    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
于 2013-03-31T19:06:13.430 回答