我有下面的功能,到目前为止我还没有工作。我想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")
不管怎样,回声结果总是“死的”。
有人能帮我一下哪里出了问题吗?和/或有没有更好的方法来达到同样的效果?
非常感谢。
更新:修改了代码以包含双引号,但仍然得到相同(不正确)的结果。
9条答案
按热度按时间kpbpu0081#
这对我在wordpress中也不起作用。我也尝试了-t和-n等方法,但都没有成功。我用过,
最后,这对我来说非常有效。我是从http://www.phpscriptsdaily.com/php/php-ping/ 希望这会有帮助
好吧,我想修改这个,因为它是在我的本地主机上正常工作,但不是在我的实时服务器的实时服务器,我有另一件事,现在既适用于本地,也适用于现场。
然后显示服务器为0启动,为1关闭。
这对我很有效。我从ping网站得到了这个结果,并用php返回结果,谢谢@karim79
oyt4ldly2#
我使用这个函数:
bgibtngc3#
我已经开发了一个算法来处理异构操作系统,包括windows和linux。
实现以下类:
nle07wnf4#
这对我来说很好。。
llycmphe5#
我刚刚写了一个非常快速的解决方案,结合以上所有的知识
svgewumm6#
对于windows,使用此类
https://github.com/geerlingguy/ping
juzqafwq7#
注意:下面的解决方案在windows上不起作用。在linux exec上,从控制台发出一个“which ping”命令,并相应地设置(建议的exec调用的)命令路径
我认为您需要检查命令的退出状态,而shell_exec会提供完整的输出(如果命令输出从一个命令版本更改为另一个版本,可能会很危险)。出于某种原因)。此外,变量$ip不会在单引号内解释。你得用双倍的。这可能是你唯一需要解决的问题,以使它工作。
但我认为下面的代码可以更“便携”。事实上,捕捉退出状态比解析结果字符串更好。另外,最好指定ping命令的完整路径。
oyxsuwqo8#
在尝试这些示例之前,一定要检查ping命令的手册页(无论如何都是好的做法)。对于ubuntu16(例如)来说,接受的答案不能作为
-n 3
失败(这不再是数据包的计数,-n
表示不将ip地址转换为主机名)。根据op的要求,潜在的替代功能如下:
goucqfw69#
这在主机名、反向ip(对于内部网络)和ip上运行良好。