php - PING - 使用PHP ping一个IP地址并回显结果

69 5

我有以下功能,但目前无法工作,我想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")



echo结果总是''dead'' - 无论我怎么做。

可以帮我看看哪儿出错了?有更好的方法来实现同样的结果吗?

多谢。

时间: 原作者:

107 3

注意:下面的解决方案在Windows上不起作用。 在Linux上,从控制台发出"ping "命令,并设置命令路径(所建议的exec调用),


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



原作者:
58 0

这在我这里工作的很好。 。


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


}



原作者:
125 1

我已经在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";



原作者:
134 0

对于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

原作者:
74 2

使用主机名,反向IP (用于内部网络)和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);



原作者:
129 1

我使用这个函数:


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


}



原作者:
...