ホームページ  >  記事  >  バックエンド開発  >  IP アドレスに関係なく、PHP ping 関数が常に「dead」を返すのはなぜですか?

IP アドレスに関係なく、PHP ping 関数が常に「dead」を返すのはなぜですか?

DDD
DDDオリジナル
2024-11-06 05:13:02716ブラウズ

Why does my PHP ping function always return

PHP を使用して IP アドレスに ping を実行し、結果をエコーする

このプログラミングの質問では、ユーザーは ping を実行する PHP 関数の作成について支援を求めています。 IP アドレスを取得し、生存しているかどうかを表示します。彼らは関数を実装しましたが、指定された IP アドレスに関係なく常に「デッド」を返します。

初期関数:

function pingAddress($ip){
    $pingresult = shell_exec("start /b ping $ip -n 1");
    $dead = "Request timed out.";
    $deadoralive = strpos($dead, $pingresult);

    if ($deadoralive == false){
        echo "The IP address, $ip, is dead";
    } else {
        echo "The IP address, $ip, is alive";
    }

}

説明:

この関数は、ping 要求を 1 つだけ送信する -n 1 オプションを指定して、shell_exec 関数を使用して IP アドレスへの ping を試行します。次に、ping コマンドの出力で文字列「Request timed out」を確認します。 IP アドレスが生きているかどうかを確認します。

問題:

  1. Windows 固有のコマンド: start /b ping コマンドは次のとおりです。これは Windows に固有のものであり、他のオペレーティング システムでは動作しない可能性があります。
  2. 出力での strpos の使用: ping 出力内の文字列の位置を直接確認することは、出力形式であるため信頼性が低い可能性があります。 ping コマンドのバージョンによって異なる場合があります。
  3. 二重引用符がありません: 変数 $ip が二重引用符で囲まれていないため、適切な解釈が妨げられる可能性があります。

提案された解決策:

ユーザーの質問は代替解決策も提案しています:

function pingAddress($ip) {
    $pingresult = exec("/bin/ping -n 3 $ip", $outcome, $status);
    if (0 == $status) {
        $status = "alive";
    } else {
        $status = "dead";
    }
    echo "The IP address, $ip, is  ".$status;
}

説明:

この関数:

  1. exec 関数を使用して、-n 3 オプションを指定して ping コマンドを実行し、3 つの ping 要求を送信します。
  2. ping コマンドの終了ステータスを確認します。ステータス 0 は、ping が成功したことを示します (つまり、IP アドレスが生きている)。
  3. $status 変数を使用して、IP アドレスが生きているか死んでいるかを判断し、それに応じて結果を表示します。

以上がIP アドレスに関係なく、PHP ping 関数が常に「dead」を返すのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。