-1

我正在使用 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"; 
}
4

3 回答 3

3

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

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

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

于 2013-06-07T23:22:40.367 回答
0

您从exec-command 错误地分配了值。如果您阅读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-command 返回的。在这种情况下,它是空行\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
于 2013-06-07T23:15:08.503 回答
0

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

<?php

function salute() {
    return 'Hello';
}

echo salute();

?>

你应该做一些调试:

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

  • 检查您的 error_log 文件

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

于 2013-06-07T23:20:38.637 回答