1

我正在尝试让一个基本的 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/');
}

?>
4

1 回答 1

1

注意:您的代码在 Linux 上似乎可以正常工作,但在 Windows 上却不行。进一步检查我注意到 Windows 不提供-cping 选项,这导致它返回与预期不同的值并且您的 ping 失败

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

这似乎假设返回值将0来自exec成功?但根据PHP 手册,它将是

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

于 2013-03-26T03:55:51.027 回答