-1

どのように機能するかを確認するために、IPアドレスにpingを実行し、returnステートメントで結果を取得するスクリプトを作成しましたが、機能しません。私のコードを見て、どこが間違っているか教えてください。

ありがとう

function ping () {
    $sun = exec ("ping -c 3  192.168.5.1",$output, $status );
    return $sun;
}

$pingc = ping();
echo "$pingc \n";

if ( $pingc == 0 ) {
    echo "host is up \n";
}
else {
    echo "host is down \n"; 
}
4

3 に答える 3

3

fsockopenを使用して、アドレスの可用性をテストできます。例:

if (@fsockopen("192.168.5.1", 80)===false)
   echo 'host is down\n';
else
   echo 'host is up\n';

2 番目のパラメーターはポートです (ここでは 80)

于 2013-06-07T23:22:40.367 に答える
0

exec-commandからの値を間違って割り当てています。PHP-docsを読むと、出力自体が2番目の引数として割り当てられた変数に格納されていることが明確に述べられています。

のコンテンツを単純にダンプしようとしましたが$output、得られた結果は次のとおりです。

Array
(
    [0] => PING 192.168.5.1 (192.168.5.1) 56(84) bytes of data.
    [1] => 
    [2] => --- 192.168.5.1 ping statistics ---
    [3] => 3 packets transmitted, 0 received, 100% packet loss, time 1999ms
    [4] => 
)

編集: Marcelo Pascual が指摘したように、最後の行はexec-command から返されます。この場合\n、それは (明らかに) 真でも偽でもない空の行です。アレイを取得して、ping が成功したかどうかの情報を確認する必要があります。

サーバーがオフラインかオンラインかを判断できる簡単なコードを次に示します。

function ping() {
    exec ("ping -c 3  192.168.5.1", $output);

    $status = true;
    foreach ($output as $v) {
        if (strpos($v, '100% packet loss') !== false) {
            $status = false;
            break;
        }
    }

    return $status;
}

if (ping())
    // Server is up
else
    // Server is down
于 2013-06-07T23:15:08.503 に答える
0

システムで実行できないexec()か、コマンドが間違っている可能性があります。リターン機能をテストしたい場合は、もっと簡単なことを試してください。

<?php

function salute() {
    return 'Hello';
}

echo salute();

?>

デバッグを行う必要があります。

  • がシステムで利用可能かどうかを確認するにexec()は、次を試してください。print_r( exec('YOUR_COMMAND_HERE') );

  • error_log ファイルを確認してください

  • error_reporting(E_ALL)スクリプトの先頭に追加します。

于 2013-06-07T23:20:38.637 に答える