Ping服务器以检查它是否已启动

时间:2013-06-07 23:08:34

标签: php

我正在使用return语句,看看它是如何工作的我已经创建了ping ip地址的地方,并使用return语句返回结果但是不起作用请查看我的代码并让我知道我哪里出错了。

谢谢

function ping () {
    $sun = exec ("ping -c 3  192.168.5.1",$output, $status );
    return $sun;
}

$pingc = ping();
echo "$pingc \n";

if ( $pingc == 0 ) {
    echo "host is up \n";
}
else {
    echo "host is down \n"; 
}

3 个答案:

答案 0 :(得分:2)

您可以使用 fsockopen 来测试地址的可用性,例如:

if (@fsockopen("192.168.5.1", 80)===false)
   echo 'host is down\n';
else
   echo 'host is up\n';

第二个参数是端口(这里是80)

答案 1 :(得分:0)

您正在错误地分配exec - 命令中的值。如果您阅读PHP-docs,它会清楚地说明输出本身存储在指定为第二个参数的变量中。

我试图简单地转储$output的内容,我得到的结果是:

Array
(
    [0] => PING 192.168.5.1 (192.168.5.1) 56(84) bytes of data.
    [1] => 
    [2] => --- 192.168.5.1 ping statistics ---
    [3] => 3 packets transmitted, 0 received, 100% packet loss, time 1999ms
    [4] => 
)
编辑:正如Marcelo Pascual指出的那样,最后一行是从exec - 命令返回的。在这种情况下,它是空行\n,它(显然)不是真或假。如果ping成功,您将必须获取阵列并检查信息。

所以,这是一个简单的代码,应该能够确定服务器是脱机还是在线。

function ping() {
    exec ("ping -c 3  192.168.5.1", $output);

    $status = true;
    foreach ($output as $v) {
        if (strpos($v, '100% packet loss') !== false) {
            $status = false;
            break;
        }
    }

    return $status;
}

if (ping())
    // Server is up
else
    // Server is down

答案 2 :(得分:0)

也许您无法在系统上运行exec(),或者命令错误。 如果您想测试返回功能,请尝试更简单的方法:

<?php

function salute() {
    return 'Hello';
}

echo salute();

?>

你应该做一些调试:

  • 要查看系统中是否有exec(),只需尝试:print_r( exec('YOUR_COMMAND_HERE') );

  • 检查您的error_log文件

  • 在脚本顶部添加error_reporting(E_ALL)