首頁  >  文章  >  後端開發  >  為什麼無論 IP 位址如何,我的 PHP ping 函數總是回傳「死」?

為什麼無論 IP 位址如何,我的 PHP ping 函數總是回傳「死」?

DDD
DDD原創
2024-11-06 05:13:02716瀏覽

Why does my PHP ping function always return

使用PHP 對IP 位址執行Ping 操作並回顯結果

在此程式設計問題中,使用者尋求協助以建立PHP 函數來ping IP 位址並顯示它是否處於活動狀態。他們已經實現了一個函數,但無論提供的 IP 位址如何,它始終會傳回「dead」。

初始函數:

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";
    }

}

說明:

該函數嘗試使用shell_exec 函數來嘗試使用 IP 位址,並使用 IP 位址-n 1 選項僅發送一個ping 請求。然後,它檢查 ping 命令的輸出中是否有字串「請求逾時」。確定 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 命令,發送三個ping 請求。
  2. 檢查 ping 指令的退出狀態,其中狀態 0 表示 ping 成功(即 IP 位址處於活動狀態)。
  3. 使用 $status 變數來決定 IP 位址是活動還是失效,並相應地顯示結果。

以上是為什麼無論 IP 位址如何,我的 PHP ping 函數總是回傳「死」?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn