2017-05-03 103 views
2

我正在嘗試爲我的遊戲服務器製作服務器狀態頁,並且代碼最終不會顯示服務器是否在線。PHP服務器狀態碼錯誤

<?PHP 
$ts_ip = "177.82.148.141"; 
$ts_port = "2505"; 

$output = @fsockopen("$ts_ip", $ts_port, $errno, $errstr, 2); 
stream_set_timeout($output, 00002); 

if (!$output) { 
    echo "<FONT COLOR=#DD0000><B>FEB Offline</B></FONT>"; 
} else { 
    echo "<FONT COLOR=#00DD00><B>FEB Online</B></FONT>"; 
} 
@fclose($output); 
?> 

這也給了我這個錯誤:

Warning: stream_set_timeout() expects parameter 1 to be resource, boolean given in /home/u918484727/public_html/teste.php on line 6

五月有人能幫助我嗎?

+3

在'fsockopen'的開頭刪除'@'。你會得到更多的警告,因爲'$ output'可能等於false或者什麼。找出爲什麼'fsockopen'失敗。 –

+0

當我刪除@我有一​​個錯誤' - ' 警告:fsockopen():無法連接到177.82.148.141:2505(連接超時)在/home/u918484727/public_html/teste.php在線5 –

+1

對於記錄'@'被稱爲**錯誤控制運算符**,並將抑制由表達式產生的任何錯誤。資料來源:http://php.net/manual/en/language.operators.errorcontrol.php –

回答

-1

有可能是一個更好的方式來處理這個問題,但是這將使其工作。

$ts_ip = "177.82.148.141"; 
$ts_port = "2505"; 

$output = @fsockopen($ts_ip, $ts_port, $errno, $errstr, 2); 

if (!$output) { 
    echo "<FONT COLOR=#DD0000><B>FEB Offline</B></FONT>"; 
} else { 
    echo "<FONT COLOR=#00DD00><B>FEB Online</B></FONT>"; 
    stream_set_timeout($output, 00002); 
    @fclose($output); 
} 

我把$output邏輯在else等等您的代碼在返回false時不會嘗試將其用作資源

另外,雖然它不是問題的原因,但supajason指出您應該使用$ ts_ip而不是「$ ts_ip 「你也應該在其他w中重構你的代碼ays,如刪除@錯誤抑制。

+0

謝謝,代碼沒有給出更多的錯誤,但當服務器實際上在線時不顯示「FEB online」 –

+0

服務器可能在線,但端口2505已完全關閉。 –

+0

@PedroLobito:/ http://prntscr.com/f3rzmp我會嘗試在路由器上做些什麼 –

0

「$ ts_ip」不應該有「圓他們?

+0

在這種情況下引號沒有什麼區別。 – Barmar