php ping测试和重定向

时间:2013-03-26 03:45:07

标签: php redirect ip ping host

我试图获得一个基本的php ping脚本工作,它将ping我的网站ip,如果它响应将用户重定向到我的网站,但如果它没有,它会将用户重定向到其他地方。我已经附上了目前为止我所拥有的内容,但是目前它似乎没有ping该网站,因为它只是直接进入http://othersite.com,如下例所示。感谢您提供的任何帮助。

<?php

function ping($host)
{
    exec(sprintf('ping -c 1 -W 5 %s', escapeshellarg($host)), $res, $rval);
    return $rval === 0;
}
// random host ip example
$host = '8.8.8.8';
$online = ping($host);

// if site is online, send them to the site.
if( $online ) {
       header('Location: mysite.com');
} 
// otherwise, lets go elsewhere to an online site
else {
        header('Location: http://othersite.com/');
}

?>

1 个答案:

答案 0 :(得分:1)

注意:您的代码似乎在Linux上运行良好,但在Windows上运行不正常。进一步检查我发现Windows没有为ping提供-c选项,导致它返回的值与预期不同,并且你的ping失败

exec(sprintf('ping -c 1 -W 5 %s', escapeshellarg($host)), $res, $rval);
    return $rval === 0;

这似乎假设成功时来自0的返回值为exec?但根据PHP Manual,它将是

The last line from the result of the command. If you need to execute a command and have all the data from the command passed directly back without any interference, use the passthru() function. To get the output of the executed command, be sure to set and use the output parameter.

看起来您与返回值的比较是问题所在。 $rval包含什么价值?