2013-05-08 155 views
0

嗨我想在我的項目中加入一個函數,它將ping我的應用程序服務器並查看它們是否正在運行。問題是,每次我嘗試使用這個函數時,它總是返回它們還活着,即使我在我的本地環境中,並且這些IP地址上沒有服務器。發生什麼了?fsockopen()總是返回true

這裏是我的功能:

function ping($host, $port, $timeout) { 
    if($fp = fsockopen($host,$port,$errCode,$errStr,$timeout)){ 
     return 'Alive'; 
    } else { 
     return 'Not alive'; 
    } 
    fclose($fp); 
} 

這裏是我正在調用該函數:

foreach ($appservers as $key => $value) { 
     echo ping($value['privateip'] , 80, 1).'<br/>'; 
    } 

這裏是我的服務器變量數組:

$appservers = array(
'app1' => array(
    'publicdns' => 'app1.xxxx.com', 
    'privateip' => '1.1.1.101', 
    'alive' => NULL, 
    'active_users' => NULL 
), 

'app2' => array(
    'publicdns' => 'app2.xxxx.com', 
    'privateip' => '1.1.1.102', 
    'alive' => NULL, 
    'active_users' => NULL 
), 

'app3' => array(
    'publicdns' => 'app3.xxxx.com', 
    'privateip' => '1.1.1.103', 
    'alive' => NULL, 
    'active_users' => NULL 
), 

'app4' => array(
    'publicdns' => 'app4.xxxx.com', 
    'privateip' => '1.1.1.104', 
    'alive' => NULL, 
    'active_users' => NULL 
) 

);

回答

0

之前就看到過這個問題,您正在使用DNS服務將不存在的域解析爲服務器,該服務器爲您提供了一個「友好」的錯誤頁面,並返回200個響應代碼。

有關此問題的更多詳細信息,請參閱:get_headers Inconsistency

您可以DavidRandom解決方案解決它

var_dump(ping("stackoverflow.com", 30, 1)); // port 30 return false 
var_dump(ping("stackoverflow.com", 80, 1)); // port 80; returns 0.49000000953674 

你的函數修改

function ping($host, $port, $timeout) { 
    $a = gethostbyname('idontexist.tld'); 
    $b = gethostbyname($host); 

    if ($a == $b) 
     return false; 

    $time = microtime(true); 
    $fp = @fsockopen($host, $port, $errCode, $errStr, $timeout); 
    $time = microtime(true) - $time; 
    if ($fp) { 
     fclose($fp); 
     return $time; 
    } else { 
     return false; 
    } 
} 
+0

進行更新真棒感謝。想知道fsockopen之前的@符號嗎? – slick1537 2013-05-08 12:04:08

+0

壞消息是,我只是想更新的代碼,它是返回ping時間....'0.010555028915405 0.010455846786499 0.010455846786499 0.0095298290252686' – slick1537 2013-05-08 12:08:46

+0

@KevinMcKinney錯誤supression ....如果你可以給這個IP我想2〜測試我自己 – Baba 2013-05-08 12:11:02