2013-03-11 2 views
1

라우터 (192.168.200.254) 뒤에있는 회사의 몇 대의 컴퓨터 (192.168.200.1 및 192.168.200.2)에 ping을 실행하고 있습니다.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 응답을 받는다는 것입니다. 내가 대신 거짓 양성 "대상을 위해 생성 된 $ 출력 배열을 검색하려고하고 그래서

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

로 : 192.168.220.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 ($ 출력)을 보여주고있다 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와 같은 무언가를 할 것입니다. 또는 안전한 가정이라고 생각한다면 배열의 3 번째 요소에 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 함수 또는 정규 표현식 검사를 사용할 수 있습니다. 그리고 배열에 있기 때문에 누군가가 제안한 것처럼 배열의 문자열을 결합하고 텍스트를 찾으려고합니다.

관련 문제