2015-04-23 43 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); 
?>