Ping в LGSL

Ответить
Crank174RuS
Сообщения: 66
Зарегистрирован: 19.09.2010
Люди, кто ни буть знает как сделать чтобы определяло пинг в LGSL мониторинге

Аватара пользователя
Distructor
Администратор
Сообщения: 1607
Зарегистрирован: 28.12.2009
давненько я отвечал на этот вопрос на другом форуме ныне мертвом..

В основном для определения пинга сервера используется засекание времени от направления запроса серверу до получения ответа.

Соответственно до открытия сокета засекаем текущее время

Код: Выделить всё

$timeStart = microtime(true);
после получения ответа (но до его анализа чтобы лишнее время не накручивалось) высчитываем пинг сервера

Код: Выделить всё

$ping = (int)((microtime(true) - $timeStart)*1000);
С помощью этих команд можно определить пинг сервера, но как его потом сохранить в базу и как вывести - это уже отдельная история. Если знаний у самого не хватит - обращайся в раздел платных услуг.

Xsfd
Сообщения: 20
Зарегистрирован: 21.04.2012
Подскажите в чем проблема.
Делаю отображение пинга следующим образом:

в lgsl_class.php помещаю функцию:

Код: Выделить всё

function icmp_checksum($data) {
  if (strlen($data) % 2) {
    $data .= "\x00";
  }
  $bit = unpack('n*', $data);
  $sum = array_sum($bit);
  while  ($sum  >> 16) {
    $sum = ($sum >> 16) + ($sum & 0xffff);
  }
  return pack('n*', ~$sum);
}

function ping($host) {
  $tmp = "\x08\x00\x00\x00\x00\x00\x00\x00PingTest";
  $checksum = icmp_checksum($tmp);
  $package = "\x08\x00".$checksum."\x00\x00\x00\x00PingTest";
  $socket = socket_create(AF_INET, SOCK_RAW, 1);
  socket_connect($socket, $host, null);
  $timer = microtime(1);
  socket_send($socket, $package, strlen($package), 0);
  if (socket_read($socket, 255)) {
    return round((microtime(1) - $timer) * 1000, 2);
  }
}
В lgsl_list.php сразу на второй строке вставляю:

Код: Выделить всё

$pingtime = ping('{$server['b']['ip']}');
а в нужном месте вывожу через {$pingtime}

Итог - пропадает весь список и в итоге белая страница. Что не так? :(

-- 23 июн 2012, 21:12 --

В оригинале код выглядит так:

Код: Выделить всё

<?php
function icmp_checksum($data) {
  if (strlen($data) % 2) {
    $data .= "\x00";
  }
  $bit = unpack('n*', $data);
  $sum = array_sum($bit);
  while  ($sum  >> 16) {
    $sum = ($sum >> 16) + ($sum & 0xffff);
  }
  return pack('n*', ~$sum);
}

function ping($host) {
  $tmp = "\x08\x00\x00\x00\x00\x00\x00\x00PingTest";
  $checksum = icmp_checksum($tmp);
  $package = "\x08\x00".$checksum."\x00\x00\x00\x00PingTest";
  $socket = socket_create(AF_INET, SOCK_RAW, 1);
  socket_connect($socket, $host, null);
  $timer = microtime(1);
  socket_send($socket, $package, strlen($package), 0);
  if (socket_read($socket, 255)) {
    return round((microtime(1) - $timer) * 1000, 2);
  }
}

$pingtime = ping('www.google.com');
echo $pingtime;

?>

Ответить