1

私は自分のサイトのIPをpingする基本的なphppingスクリプトを機能させようとしています。応答すると、ユーザーは自分のサイトにリダイレクトされますが、そうでない場合は、ユーザーを別の場所にリダイレクトします。これまでに持っていたものを下に添付しましたが、以下の例に示すように、http://othersite.comに直接アクセスするため、現在、サイトに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/');
}

?>
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 に答える