Ping в LGSL
-
- Сообщения: 66
- Зарегистрирован: 19.09.2010
Люди, кто ни буть знает как сделать чтобы определяло пинг в LGSL мониторинге
- Distructor
- Администратор
- Сообщения: 1607
- Зарегистрирован: 28.12.2009
давненько я отвечал на этот вопрос на другом форуме ныне мертвом..
В основном для определения пинга сервера используется засекание времени от направления запроса серверу до получения ответа.
Соответственно до открытия сокета засекаем текущее времяпосле получения ответа (но до его анализа чтобы лишнее время не накручивалось) высчитываем пинг сервера
С помощью этих команд можно определить пинг сервера, но как его потом сохранить в базу и как вывести - это уже отдельная история. Если знаний у самого не хватит - обращайся в раздел платных услуг.
В основном для определения пинга сервера используется засекание времени от направления запроса серверу до получения ответа.
Соответственно до открытия сокета засекаем текущее время
Код: Выделить всё
$timeStart = microtime(true);
Код: Выделить всё
$ping = (int)((microtime(true) - $timeStart)*1000);
Подскажите в чем проблема.
Делаю отображение пинга следующим образом:
в lgsl_class.php помещаю функцию:
В lgsl_list.php сразу на второй строке вставляю:
а в нужном месте вывожу через {$pingtime}
Итог - пропадает весь список и в итоге белая страница. Что не так?
-- 23 июн 2012, 21:12 --
В оригинале код выглядит так:
Делаю отображение пинга следующим образом:
в 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);
}
}
Код: Выделить всё
$pingtime = ping('{$server['b']['ip']}');
Итог - пропадает весь список и в итоге белая страница. Что не так?
-- 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;
?>