2013-03-11 3 views
1

Я пингую пару компьютеров (192.168.200.1 и 192.168.200.2) на своем корпоративном компьютере, который находится за маршрутизатором (192.168.200.254).PHP Exec Ping Destination host unreachable

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) и до сих пор я получаю ответ звона.

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), 

var_dump ($ выход) при попытке 192.168.220.1 пинг показывает, как:

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)," 
} 

Так я вместо пытаюсь искать $ выходной массив, который создается для ложноположительных «Destination host unreachable ", но не повезло с этим маршрутом.

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"); 

Показывает как успешный. Я, вероятно, что-то делаю неправильно. Есть идеи?

+0

in_array не будет работать, поскольку он должен соответствовать всему значению элемента. Вместо этого, я бы, вероятно, сделал что-то глупое, как объединение массива в одну строку и preg_match для строки, которую вы ищете. Или, если вы считаете, что это безопасное предположение, просто preg_match для третьего элемента массива. – mkaatman

ответ

1

что нужно preg_grep. Дайте это попробовать:

function pingAddress($TEST) { 
    $pingresult = exec("ping -n 1 $TEST && exit", $output, $result); 
    //echo $result. "<br/>"; 

    if (($result == 0)){ 
     if(count(preg_grep('/Destination host unreachable/i', $output)) == 0){ 
      echo "Ping successful! <br/>"; 
     else 
      echo "Ping unsuccessful! <br/>"; 
    } 
    elseif ($result == 1){ 
     echo "Ping unsuccessful! <br/>"; 
    }  

}

+0

Работал отлично, нашел это также. – vashavoc

0

in_array будет ожидать всю строку, т.е. "Ответ от 192.168.200.254: Пункт назначения недоступен." , Вы можете использовать strstrphp manual strstr php-функцию или проверку правильного выражения. И так как это в массиве - как кто-то предложил .. присоединитесь к строке массива и попытайтесь найти текст.

Смежные вопросы