2016-11-03 7 views
0

おはよう、Exec pingコマンドがLinux CentOSで動作しない

特定のIPアドレスがアップまたはダウンしているかどうかをチェックするシステムを開発中です。私は、IP addresses.Iのリストを含むテーブルでMySQL DBを持っているIPアドレスに対してpingを実行するには、次の関数を作成しました:

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

を取得し、私は$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);とライン$result = exec('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オプションが何であれ、あなたのping ...そう、それは永遠に実行されます。

+0

こんにちは。 $ result = exec( 'ping -i 15 -c 3'。$ ip、$ outcome、$ status)を使ってvar_dump($ status)を実行すると、int(2)の結果が得られました。私が変更するとき。 $ ip varの前に、var_dump($ status)を実行して、NULL結果を返します。私はまた、$ result = exec( "ping -i 15 -c 3 2>&1"。$ ip、$ outcome、$ status)を試みました。 var_dump($ status)の結果はint(2)でした。 –

+0

あなたはpingしようとしていることを知るのに役立つかもしれません。おそらくテストとして、$ ipのgoogle.comを試してみてください(最初のコードブロックを試してみてください)。それがうまくいくなら、mysqlが正しくない可能性が高いと判断できます。 –

+0

ローカルIPアドレスのリスト(192.168.100.110など)があります。 Windowsのcmdまたは私のサーバ端末から、私のWebサーバに同じネットワーク上のIPアドレスがあるので、それらのIPアドレスを正常にpingできます。テスト目的のために、私はGoogle DNS 8.8.8.8をpingしていますが、結果は同じです。 –

関連する問題