PHPでIPアドレスにpingを実行し、平均ping時間のみの結果をエコーする簡単でクリーンな方法を知っている人はいますか?
たとえば、「最小 = 35 ミリ秒、最大 = 35 ミリ秒、平均 = 35 ミリ秒」と表示されますが、本当に必要なのは「35」だけです。
ありがとう。
次の例のように、 exec()
-function を使用してシェル コマンドを実行できます。ping
<?php
function GetPing($ip=NULL) {
if(empty($ip)) {$ip = $_SERVER['REMOTE_ADDR'];}
if(getenv("OS")=="Windows_NT") {
$ping=explode(",", $exec);
return $ping[1];//Maximum = 78ms
}
else {
$exec = exec("ping -c 3 -s 64 -t 64 ".$ip);
$array = explode("/", end(explode("=", $exec )) );
return ceil($array[1]) . 'ms';
}
}
echo GetPing();
?>
しばらく前にこの関数をオンラインで見つけました。申し訳ありませんが、どこにクレジットを記載したか覚えていませんが、for ループで使用して平均を取得できます。
function ping($host, $timeout = 10)
{
$output = array();
$com = 'ping -n -w ' . $timeout . ' -c 1 ' . escapeshellarg($host);
$exitcode = 0;
exec($com, $output, $exitcode);
if ($exitcode == 0 || $exitcode == 1)
{
foreach($output as $cline)
{
if (strpos($cline, ' bytes from ') !== FALSE)
{
$out = (int)ceil(floatval(substr($cline, strpos($cline, 'time=') + 5)));
return $out;
}
}
}
return FALSE;
}
$total = 0;
for ($i = 0; $i<=9; $i++)
{
$total += ping('www.google.com');
}
echo $total/10;
必要に応じて for ループの回数を変更するだけです。