3

PHPでIPアドレスにpingを実行し、平均ping時間のみの結果をエコーする簡単でクリーンな方法を知っている人はいますか?

たとえば、「最小 = 35 ミリ秒、最大 = 35 ミリ秒、平均 = 35 ミリ秒」と表示されますが、本当に必要なのは「35」だけです。

ありがとう。

4

3 に答える 3

5

次の例のように、 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();
    ?>

ソース: http://php.net/manual/en/function.exec.php

于 2012-09-27T06:01:40.007 に答える
4

しばらく前にこの関数をオンラインで見つけました。申し訳ありませんが、どこにクレジットを記載したか覚えていませんが、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 ループの回数を変更するだけです。

于 2012-09-27T06:10:14.260 に答える