【问题标题】:PHP ping to get response with the ip addressPHP ping 以获取 IP 地址的响应
【发布时间】:2015-07-01 02:47:53
【问题描述】:

我正在尝试 ping ip 地址以测试该 ip 地址是否可用。但是我在使用 fsockopen 函数时遇到了麻烦。我对使用 'ping','exec' 函数进行了一些研究,但它们似乎都不是真正可行的。

这是我测试 IP 地址的代码:

<?php
    $ipAddress = array("192.168.1.1","192.168.1.67");
    $kiosk = array("Kuantan (35)","UTC Kuantan (36)");

    $checkCount = 0;
    foreach(array_combine($ipAddress,$kiosk) as $items => $kiosk){
        $fp = @fSockOpen($items,80,$errno,$errstr,1);

        if(is_resource($fp)){
            if($fp) { 
                $status=0; 
                fclose($fp); 
                echo 'Success<br/>'; 
            }
        }
        else{
            echo 'Failed<br/>'; 

        }

    }
?>

我可以从 cmd 提示符 ping 的两个 IP 地址。但是对于 192.168.1.67,它导致我“失败”,只有 192.168.1.1。或 127.0.0.1 向我显示“成功”。有什么我做错了吗?

【问题讨论】:

  • @Catalyst 是的,我从那里找到了解决方案并尝试为自己做,但现在我遇到了代码问题。当我尝试 ping 时,就像我的代码中显示的一些响应 IP 地址失败一样。我的代码有什么问题吗?对不起我的英语不好
  • 必须在我的 linux 节点上重新安装 PHP,我会尝试并告诉你会发生什么。
  • @Catalyst 好的,谢谢。我目前有 192.168.1.67 可以在我 ping 时响应,但我的代码回显“失败”。我不知道为什么
  • 当我尝试使用 google 服务器(我从命令行 ping google 并且此服务器响应)74.125.224.7 你的脚本没有任何更改返回成功。

标签: php ping


【解决方案1】:

您的代码并没有真正 ping,只是尝试在端口 80 上打开 TCP 连接。ping 命令使用 ICMP 数据包,因此 192.168.1.67 可能不接受端口 80 上的连接。

在您与 Catalyst 聊天之后,这里有一个示例代码,它将仅发送两个数据包并等待最多 2 秒的响应。 $retval 成功时为 0,丢包时为 1,任何其他错误时为 2。这是在Linux上,windows命令参数有点不同,但你应该可以改变它。

<?
// unset variables first to avoid mixing the results from previous calls
$retval=-1;
$output=array();
exec("ping 127.0.0.1 -c2 -w2 2>&1",$output,$retval);
echo "Return code: ".$retval."<br>\n";
echo implode("<br>\n",$output);
?>

【讨论】:

    猜你喜欢
    • 2015-03-08
    • 2011-02-07
    • 2018-01-14
    • 2013-06-05
    • 2014-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多