2016-11-03 2 views
0

Добрый день,Exec команда пинг не работает на Linux Centos

Я работаю в системе, которая проверяет, является ли определенный IP адрес вверх или вниз. У меня есть БД MySQL с таблицей, содержащей список IP addresses.I создали следующую функцию пинговать IP-адрес:

function pingAddress($ip) { 

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

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

и в моем цикле, пока я следующее:

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); ИЛИ $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 с установленным на нем apache.

У меня что-то не хватает, потому что я попробовал практически большинство предложенных здесь решений на основе предыдущих похожих вопросов, но это не сработало.

Есть ли лучший способ кода такой системы?

Благодарим за помощь.

ответ

2

Вы, вероятно, необходимо изменить синтаксис exec:

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

Кроме того, вы можете включить -c или любой ваш пинг count варианта ... в противном случае он будет работать вечно.

+0

Hi. Использование $ result = exec ('ping -i 15 -c 3'. $ Ip, $ result, $ status) и выполнение var_dump ($ status) дал мне результат int (2). Когда я меняю. до, перед $ ip var и var_dump ($ status), я получаю результат NULL. Я также попробовал $ result = exec ("ping -i 15 -c 3 2> & 1". $ Ip, $ result, $ status); но результатом var_dump ($ status) был int (2). –

+0

Это может помочь узнать, что вы пытаетесь выполнить ping; возможно, в качестве теста попробуйте «google.com» для $ ip (попробуйте только первый блок кода). Если он работает, вы можете понять, что, вероятно, mysql не является правильным. –

+0

У меня есть список локальных IP-адресов (например, 192.168.100.110). Из окон cmd или моего серверного терминала я могу успешно выполнить ping эти IP-адреса (потому что мой веб-сервер имеет IP-адрес в той же сети). В целях тестирования я пинговаю google dns 8.8.8.8, но результат тот же. –

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