使用PHP Ping一个IP地址并回显结果

我有以下function,我不工作到目前为止。 我想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") 

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

有人可以帮我,我哪里错了? 和/或有没有更好的方法做这个结果相同?

非常感谢。

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

注意:下面的解决scheme不适用于Windows。 在linux上,从控制台执行“哪个ping”命令,并相应地设置命令path(build议的exec调用)

我想你想检查命令的退出状态,而shell_exec给你完整的输出(可能是危险的应该命令输出从命令版本更改为版本由于某种原因)。 而且你的variables$ ip不能在单引号内解释。 你必须使用双重的“”。 这可能是您需要修复才能使其工作的唯一的事情。

但我认为下面的代码可以更“便携”。 恕我直言,它实际上是捕获退出状态,而不是试图parsing结果string更好。 恕我直言,指定ping命令的完整path也更好。

 <?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"); 

这在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"); 

最后,这对我来说非常合适。 我从http://www.phpscriptsdaily.com/php/php-ping/提到这个希望这会有所帮助;

那么我想修改这个,因为它在我的本地主机上正常工作,而不是在我的现场服务器上。对于现场服务器,我得到了另一个现在适用于本地和现场的东西。

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

然后我显示服务器是为0和为1。

这对我来说是完美的。 我从Ping网站得到这个结果,并返回PHP Thanks @ karim79

对于Windows使用这个类

 $host = 'www.example.com'; $ping = new Ping($host); $latency = $ping->ping(); if ($latency !== false) { print 'Latency is ' . $latency . ' ms'; } else { print 'Host could not be reached.'; } 

https://github.com/geerlingguy/Ping

这适用于主机名,反向IP(用于内部networking)和IP。

 function pingAddress($ip) { $ping = exec("ping -n 2 $ip", $output, $status); if (strpos($output[2], 'unreachable') !== FALSE) { return '<span style="color:#f00;">OFFLINE</span>'; } else { return '<span style="color:green;">ONLINE</span>'; } } echo pingAddress($ip); 

这对我来说很好

 $host="127.0.0.1"; $output=shell_exec('ping -n 1 '.$host); echo "<pre>$output</pre>"; //for viewing the ping result, if not need it just remove it if (strpos($output, 'out') !== false) { echo "Dead"; } elseif(strpos($output, 'expired') !== false) { echo "Network Error"; } elseif(strpos($output, 'data') !== false) { echo "Alive"; } else { echo "Unknown Error"; } 

我使用这个function:

 <?php function is_ping_address($ip) { exec('ping -c1 -w1 '.$ip, $outcome, $status); preg_match('/([0-9]+)% packet loss/', $outcome[3], $arr); return ( $arr[1] == 100 ) ? false : true; }