一尘不染

使用PHP ping IP地址并回显结果

php

我有以下功能,到目前为止我还无法使用。我想ping一个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";
    }

}

当我使用示例调用此函数时:

pingAddress("127.0.0.1")

无论如何,回声结果总是“死”。

有人可以帮我解决我的问题吗?和/或是否有更好的方法可以达到相同的效果?

非常感谢。

更新:修改了代码以包括双引号,但仍然得到相同(不正确)的结果。


阅读 478

收藏
2020-05-26

共1个答案

一尘不染

注意:以下解决方案在Windows上不起作用。 在linux exec上,从控制台执行“ which
ping”命令,并相应地设置(建议的exec调用的)命令路径

我认为您想检查命令的退出状态,而shell_exec为您提供完整的输出(出于某种原因,命令输出在命令版本之间更改可能会很危险)。此外,您的变量$
ip不会在单引号内解释。您必须使用双引号“”。那可能是您唯一需要修复才能使其正常工作的东西。

但是我认为以下代码可能更“便携”。恕我直言,实际上最好是捕获退出状态,而不是尝试解析结果字符串。恕我直言,最好指定ping命令的完整路径。

<?php
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;
}

pingAddress("127.0.0.1");
2020-05-26