2013-03-31 62 views
2
警告

我目前正在檢查,如果一臺服務器(在這種情況下192.168.1.135)這個PHP代碼在線:PHP - 檢查服務器處於脫機狀態,並沒有表現出XAMPP

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

我有這個使用XAMPP(局域網ofcourse)在自己的服務器192.168.1.130代碼

所以,如果這個服務器脫機輸出將是:

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

應該僅僅是「脫機」。如何在沒有警告的情況下顯示OFFLINE?

我認爲服務器關閉時,XAMPP會向我發送警告。但我應該怎麼做才能不顯示警告?我在XAMPP中找不到這個設置,有人知道嗎?

如果不是,我應該怎麼做47線更正,即使服務器關閉(離線)?

當服務器在線時,這將完美工作。

回答

5

使用silence operator@相應的警告:

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

邊注:正如你所看到的,@運營商抑制警告你提出要求。不過要小心。類似於'沒有路由到主機'的消息也將被抑制。 (大多數情況下,如果您的網絡連接不可用)因此,您無法確定服務器是否處於脫機狀態。如果fsockopen()未能查看原因,則應額外輸出$errmsg

+3

請注意,您應該*只做到在非常特殊的情況下*,因爲'的fsockopen()'拋出一個警告,當連接失敗,而這正是你在測試什麼,可以使用沉默運算符。 –

+0

@MadaraUchiha我和你在一起。 '@'應該小心使用,但在這種情況下,它是好的 – hek2mgl

+0

是的,我將它加入以備將來參考(如果您將它作爲旁註添加到您的答案中,我會是一個快樂的忍者)。 –

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); 
} 
+1

@MadaraUchiha:443是HTTPS的默認端口,所以它可能**是** web服務器。 – helmbert

相關問題