使用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.'; }
这适用于主机名,反向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; }