PHP поиск результата пинга для времени ответа - PullRequest
1 голос
/ 12 сентября 2011

Я пытаюсь получить время ответа на запрос ping в php. Ответ выглядит так:

PING server.domain.com (XXX.XXX.XXX.XXX) 56(84) bytes of data.
64 bytes from XXX.XXX.XXX.XXX: icmp_seq=1 ttl=58 time=2.33 ms

--- server.domain.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 2.332/2.332/2.332/0.000 ms

Я пытаюсь извлечь значение 2,33 мс, но выполнение подстроки путем поиска time= не будет работать, поскольку время отклика может быть xx.xx или xxx.xx. Длина его переменная.

Лучший способ сделать это?

Ответы [ 2 ]

4 голосов
/ 12 сентября 2011

Это регулярное выражение должно работать

/time\=([0-9]+\.[0-9]+) ms/

И вырезать его до двух десятичных знаков

/time\=([0-9]+\.[0-9]{2}) ms/

И некоторый пример кода PHP

<?php

$str = '64 bytes from XXX.XXX.XXX.XXX: icmp_seq=1 ttl=58 time=2.33 ms';

    // $result will contain the number of matches - in this case, 1
$result = preg_match('/time\=([0-9]+\.[0-9]{2}) ms/', $str, $matches);
    // You can call it like this as well, if you don't care about the number of matches
preg_match('/time\=([0-9]+\.[0-9]{2}) ms/', $str, $matches);

print_r($matches);
echo $matches[1];

?>
1 голос
/ 12 сентября 2011

Вам нужно выучить регулярные выражения - они делают что-то вроде этого почти тривиальным:

http://us.php.net/preg_match

http://us.php.net/manual/en/pcre.pattern.php

Хотя, если вы хотите разделить волосы,они действительно не нужны здесь.Если строка # 2 вашего вывода всегда соответствует желаемому, то вы берете эту строку, используйте http://us2.php.net/strrpos, чтобы найти позицию последнего знака равенства в строке, перехватите все оттуда до конца строки,и взломать последние три символа "мс".Это должно оставить вас со временем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...