2015-04-23 41 views
0

我試圖ping ip地址來測試ip地址是否可用。但是我在使用fsockopen函數時遇到了麻煩。我已經做了一些關於使用'ping','exec'函數的研究,但沒有一個看起來真的可行。PHP的ping來獲得IP地址的響應

這裏是我的代碼來測試的IP地址:

<?php 
    $ipAddress = array("192.168.1.1","192.168.1.67"); 
    $kiosk = array("Kuantan (35)","UTC Kuantan (36)"); 

    $checkCount = 0; 
    foreach(array_combine($ipAddress,$kiosk) as $items => $kiosk){ 
     $fp = @fSockOpen($items,80,$errno,$errstr,1); 

     if(is_resource($fp)){ 
      if($fp) { 
       $status=0; 
       fclose($fp); 
       echo 'Success<br/>'; 
      } 
     } 
     else{ 
      echo 'Failed<br/>'; 

     } 

    } 
?> 

兩個IP地址,我可以從命令提示符ping通。但是,對於192.168.1.67,它導致我'失敗',只有192.168.1.1。或127.0.0.1顯示我'成功'。有什麼我做錯了嗎?

+0

有關的? http://stackoverflow.com/questions/9841635/how-to-ping-a-server-port-with-php – Catalyst

+0

@Catalyst是的,我從那裏找到了解決方案,並試圖爲我自己做,但現在我' m面臨代碼問題。這就像一些響應IP地址在我嘗試ping時在代碼中顯示失敗。有什麼我在我的代碼中做錯了嗎?對不起我可憐的英語 –

+0

要重新安裝我的Linux節點上的PHP,我會試試看,並讓你知道會發生什麼。 – Catalyst

回答

0

你的代碼是不是真的執行ping命令,但只是試圖打開Ping命令使用ICMP數據包在端口80上一個TCP連接,所以大概192.168.1.67不接受你之後使用的聊天端口80上

連接這裏的催化劑是一個示例代碼,它只會發送兩個數據包,並等待響應2秒。 $ retval在成功時將爲0,在丟包時爲1,在任何其他錯誤時爲2。這是在Linux上,Windows命令參數有點不同,但你應該能夠改變它。

<? 
// unset variables first to avoid mixing the results from previous calls 
$retval=-1; 
$output=array(); 
exec("ping 127.0.0.1 -c2 -w2 2>&1",$output,$retval); 
echo "Return code: ".$retval."<br>\n"; 
echo implode("<br>\n",$output); 
?>