2016-11-03 145 views
0

美好的一天,在Linux Centos上执行ping命令不起作用

我正在检查某个IP地址是否启动或关闭。我有一个MySQL数据库包含已经创建了下面的函数来ping IP地址,IP addresses.I列表的表:

function pingAddress($ip) { 

     $result = exec('ping $ip -i 15 ', $outcome, $status); 

     if (0 == $status) { 
      echo 'Server UP '; 
     } else { 
      echo 'Server down '; 
     } 
} 

,在我while循环我有以下几点:

while($row = mysqli_fetch_array($result, MYSQLI_ASSOC)){ 
    ?> 
    <tr> 
     <td><?php pingAddress($row['client_ip_address']); ?></td> 
    </tr> 

    <?php 
    } //end while 
    ?> 

但是不是得到0(因为服务器上)我总是得到2

我已经取代了线$result = exec('ping $ip -i 15 ', $outcome, $status);$pingresult = system("ping -n 3 $ip 2>&1", $outcome, $status); OR $pingresult = shell_exec('/bin/ping -qc 1 '.$ip.' | awk -F/ \'/^rtt/\'', $result); OR ('ping $ip -i 15 ', $outcome, $status); 结果仍然没有改变。要么我有一个空数组(当我这样做var_dump($status)var_dump($outcome))。

我使用Centos7一个安装了阿帕奇。

我是失去了一些东西,因为我已经尝试了几乎大部分这里建议基于以前类似的问题的解决方案,但没有奏效。

有没有更好的方法代码这样的系统?

感谢您的协助。

回答

2

您可能需要修改的exec语法:

$result = exec('ping -i 15 -c 3 ' . $ip, $outcome, $status); 

此外,您可能包括-c或任何你平安count选项...否则将永远运行下去。

+0

嗨。使用$结果= EXEC( '平-i 15 -c 3'。$ IP,$结果,$状态),并做了后续代码var_dump($状态)给了我一个int结果(2)。当我改变。到$ ip var之前,并做一个var_dump($状态)我去一个NULL结果。我也试过$ result = exec(“ping -i 15 -c 3 2>&1”。$ ip,$ outcome,$ status);但var_dump($ status)的结果是int(2)。 –

+0

它可能有助于知道你想要ping什么;也许作为一个测试尝试'谷歌.com'为$ ip(尝试只是第一块代码)。如果它工作,那么你可以认为它可能是MySQL不正确。 –

+0

我有一个本地IP地址列表(例如192.168.100.110)。从Windows cmd或我的服务器终端上,我可以成功地ping通这些IP地址(因为我的Web服务器在同一网络中有一个IP地址)。为了测试的目的,我ping的谷歌DNS 8.8.8.8,但结果是一样的。 –