php ping测试和重定向

php ping测试和重定向,php,redirect,ip,ping,host,Php,Redirect,Ip,Ping,Host,我正在尝试让一个基本的php ping脚本工作,它将ping我的站点ip,如果有响应,它会将用户重定向到我的站点,但是如果没有,它会将用户重定向到其他地方。我已经在下面附上了我所拥有的东西,但是目前它似乎并没有ping该站点,因为它只是直接转到下面的示例中所示的位置。谢谢你能提供的任何帮助 <?php function ping($host) { exec(sprintf('ping -c 1 -W 5 %s', escapeshellarg($host)), $res, $rv

我正在尝试让一个基本的php ping脚本工作,它将ping我的站点ip,如果有响应,它会将用户重定向到我的站点,但是如果没有,它会将用户重定向到其他地方。我已经在下面附上了我所拥有的东西,但是目前它似乎并没有ping该站点,因为它只是直接转到下面的示例中所示的位置。谢谢你能提供的任何帮助

<?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/');
}

?>

注意:您的代码在Linux上运行正常,但在windows上运行不正常。进一步检查,我注意到windows没有为ping提供
-c
选项,这会导致它返回与预期不同的值,ping失败

exec(sprintf('ping -c 1 -W 5 %s', escapeshellarg($host)), $res, $rval);
    return $rval === 0;
这似乎假设成功时返回值将是
0
from
exec
?但是根据它的说法

命令结果的最后一行。如果您需要执行命令并将命令中的所有数据直接传回而不受任何干扰,请使用passthru()函数。
要获取已执行命令的输出,请确保设置并使用输出参数。


似乎您与返回值的比较是问题所在。
$rval
包含什么值?

注意:您的代码在Linux上运行正常,但在windows上运行不正常。进一步检查,我注意到windows没有为ping提供
-c
选项,这会导致它返回与预期不同的值,ping失败

exec(sprintf('ping -c 1 -W 5 %s', escapeshellarg($host)), $res, $rval);
    return $rval === 0;
这似乎假设成功时返回值将是
0
from
exec
?但是根据它的说法

命令结果的最后一行。如果您需要执行命令并将命令中的所有数据直接传回而不受任何干扰,请使用passthru()函数。
要获取已执行命令的输出,请确保设置并使用输出参数。


似乎您与返回值的比较是问题所在。
$rval
包含什么值?

您知道不同的输出吗?从Linux机器ping时?Windows机器呢?如果是这样,那么捕获您的输出,然后根据一个关键短语执行操作,这样您的脚本就可以识别成功或失败我没有想到这是一个linux vps,我正在ping我将根据它修改脚本谢谢:)您知道不同的输出吗?从Linux机器ping时?Windows机器呢?如果是这样,请捕获您的输出,然后根据关键短语执行操作,这样您的脚本就可以识别成功或失败。我没有想到这是一个linux vps,我正在ping。我将根据它修改脚本。谢谢:)谢谢您的回复,我将查看您的建议,并尝试根据这些建议使其正常工作。我对使用php还不熟悉,但我假设$rval应该根据主机是否在线返回0或1,我使用了这个>中的一些代码来编写它。再次感谢您的帮助:)谢谢您的回复,我会考虑您的建议,并根据这些建议努力使其生效。我对使用php还不熟悉,但我假设$rval应该根据主机是否在线返回0或1,我使用了这个>中的一些代码来编写它。再次感谢您的帮助:)