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

Ber*_*ard 19 php ping shell-exec

我有以下功能,到目前为止我没有工作.我想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";
    }

}
Run Code Online (Sandbox Code Playgroud)

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

pingAddress("127.0.0.1")
Run Code Online (Sandbox Code Playgroud)

回声结果总是"死" - 无论如何.

有人可以在我出错的地方帮助我吗?和/或者有更好的方法来做同样的结果吗?

非常感谢.

更新:已修改代码以包含双引号但仍获得相同(不正确)的结果.

mar*_*pin 17

注意:下面的解决方案在Windows上不起作用.在linux上执行来自控制台的"哪个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");
Run Code Online (Sandbox Code Playgroud)

  • **1)**`ping`,与大多数UNIX命令行实用程序一样,成功时返回0,而不是1.**2)**OP使用Windows,因此`/ bin/ping`不起作用. (6认同)
  • 删除 /bin/ 并将 0 更改为 1 看起来有效 - 谢谢大家。 (2认同)
  • @Michele尝试使用-c开关 (2认同)

小智 7

这在Wordpress中也不适用于我.我也试过-t和-n等方法,但没有用.我用了,

function pingAddress($ip) {
    $pingresult = exec("/bin/ping -c2 -w2 $ip", $outcome, $status);  
    if ($status==0) {
    $status = "alive";
    } else {
    $status = "dead";
    }
    $message .= '<div id="dialog-block-left">';
    $message .= '<div id="ip-status">The IP address, '.$ip.', is  '.$status.'</div><div style="clear:both"></div>';    
    return $message;
}
// Some IP Address
pingAddress("192.168.1.1"); 
Run Code Online (Sandbox Code Playgroud)

最后,这对我来说非常合适.我在http://www.phpscriptsdaily.com/php/php-ping/中提到了这一点. 希望这会有所帮助

好吧,我想修改它,因为它在我的本地主机上工作正常,但在我的实时服务器上没有.对于实时服务器,我得到了另一个现在适用于本地和现场的东西.

$fp = fSockOpen($ip,80,$errno,$errstr,1);
if($fp) { $status=0; fclose($fp); } else { $status=1; }
Run Code Online (Sandbox Code Playgroud)

然后我显示服务器为0,向下为1.

这对我来说非常适合.我从Ping站点得到了这个并在PHP中返回结果谢谢@ karim79


Ant*_*eno 5

我已经开发了可与Windows和Linux异构操作系统一起使用的算法。

实现以下类:

<?php

    class CheckDevice {

        public function myOS(){
            if (strtoupper(substr(PHP_OS, 0, 3)) === (chr(87).chr(73).chr(78)))
                return true;

            return false;
        }

        public function ping($ip_addr){
            if ($this->myOS()){
                if (!exec("ping -n 1 -w 1 ".$ip_addr." 2>NUL > NUL && (echo 0) || (echo 1)"))
                    return true;
            } else {
                if (!exec("ping -q -c1 ".$ip_addr." >/dev/null 2>&1 ; echo $?"))
                    return true;
            }

            return false;
        }
    }

    $ip_addr = "151.101.193.69"; #DNS: www.stackoverflow.com

    if ((new CheckDevice())->ping($ip_addr))
        echo "The device exists";
    else 
        echo "The device is not connected";
Run Code Online (Sandbox Code Playgroud)

  • 请不要对多个问题重新发布类似的答案。相反,根据所提出的问题定制答案。如果问题太宽泛或彼此重复,请标记为版主。 (3认同)