我在我的公司局域网(192.168.200.254)后面ping了几台计算机(192.168.200.1和192.168.200.2)。PHP Exec Ping目标主机无法访问
function pingAddress($TEST) {
$pingresult = exec("ping -n 1 $TEST", $output, $result);
if ($result == 0) {
echo "Ping successful!";
} else {
echo "Ping unsuccessful!";
}
}
pingAddress("192.168.220.1");
pingAddress("192.168.220.2");
我的问题是,其中一台计算机没有通电(.1),仍然得到一个ping响应。
Pinging 192.168.200.1 with 32 bytes of data:
Reply from 192.168.200.254: Destination host unreachable.
Ping statistics for 192.168.200.1:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
上平192.168.220.1尝试的var_dump($输出)显示为:
array(6) {
[0]=> string(0) ""
[1]=> string(44) "Pinging 192.168.200.1 with 32 bytes of data:"
[2]=> string(57) "Reply from 192.168.200.254: Destination host unreachable."
[3]=> string(0) ""
[4]=> string(34) "Ping statistics for 192.168.200.1:"
[5]=> string(56) " Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),"
}
所以我代替我试图寻找这是对假阳性“目标创造了$输出数组主机无法访问“的消息,但没有这条路线的运气。
function pingAddress($TEST) {
$findme ="Destination host unreachable";
$pingresult = exec("ping -n 1 $TEST && exit", $output, $result);
//echo $result. "<br/>";
if (($result == 0) AND (in_array($findme, $output))){
echo "Ping unsuccessful! <br/>";
}
elseif (($result == 0) AND (!in_array($findme, $output))){
echo "Ping successful! <br/>";
}
elseif ($result == 1){
echo "Ping unsuccessful! <br/>";
}
}
pingAddress("192.168.220.1");
pingAddress("192.168.220.2");
仍然显示成功。我可能在这里做错了事。有任何想法吗?
in_array将不起作用,因为它需要匹配元素的整个值。相反,我可能会做一些愚蠢的事情,比如将数组连接到单个字符串中,并将preg_match作为您正在查找的字符串。或者,如果您认为这是一个安全的假设,那么只需在数组的第三个元素上进行preg_match。 – mkaatman 2013-03-11 19:14:41