IPB

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
Получить точное время от серверов, Можно ли как-то получить время от ваших серверов?
kroncentr
сообщение 22.3.2013, 10:06
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 1
Регистрация: 22.3.2013
Пользователь №: 1967



это нужно для правильного отображения времени на часах на одном моем сайте. В идеале хотелось бы получить результат, который дает javascript объект "new Date()" и с ним работать)

Спасибо!)
Перейти в начало страницы
 
+Цитировать сообщение
Admin
сообщение 26.3.2013, 6:42
Сообщение #2


Администратор
***

Группа: Главные администраторы
Сообщений: 270
Регистрация: 18.12.2007
Из: Саратов
Пользователь №: 1



Получать можно по NTP, например запуском команды ntpdate посредством php и парсить результат выполнения команды.

Например так, создав такие функции:
Код
function query_server($server)
{
    $command = '/usr/sbin/ntpdate -t 0 -qd '.$server;

    if (!$output = run_command($command))
    {
        return FALSE;
    }

    preg_match("/stratum ([\d]+),/s", $output, $stratum);
    preg_match("/originate timestamp: ([^\n]+)\n/s", $output, $timestamp);

    if (!isset($stratum[1])
        OR !isset($timestamp[1])
        OR $stratum[1] == 0)
    {
        return FALSE;
    }

    $timestamp = substr(trim($timestamp[1]), 17, -4);

    return array
    (
        'stratum' => trim($stratum[1]),
        'timestamp' => strtotime($timestamp)
    );
}

function run_command($command)
{
    if (!$fp = popen($command, "r"))
    {
        return FALSE;
    }

    $buffer = '';

    while (!feof($fp))
    {
        $buffer .= fgets($fp, 4096);
    }

    pclose($fp);

    if ($buffer != '')
    {
        return $buffer;
    }

    return FALSE;
}

Далее вызвав:
Код
$result = query_server('ntp2.stratum2.ru');
$js_date = date("M, d Y H:i:s", $result['timestamp']);

И уже использовать $js_date там где нужно в HTML, например так:
Код
...
<script type="text/javascript" language="javascript">
    <!--
    var TimeLocal = new Date();
    var TimeNTP1 = new Date("<?php echo $js_date ?>");
    //-->
</script>
...

Скрипт реализации самих часов на JS можно посмотреть тут.
Используется он на странице http://www.stratum1.ru

Удачи!


--------------------


Перейти в начало страницы
 
+Цитировать сообщение
Tsu
сообщение 22.5.2013, 21:50
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 2
Регистрация: 22.5.2013
Пользователь №: 2018



Добрый вечер!

Только учусь программированию, подскажите пожалуйста как это все связать. Не разобрался я, поправьте пожалуйста.

На stratum1.ru Вы выводите время по средствам js timebox, который выполняет роль таймера, правильно? а откуда берутся данные NTP как они используются и самое главное как их правильно вывести?

Извиняюсь за ламерские вопросы rolleyes.gif

Буду очень признателен ответу!
Перейти в начало страницы
 
+Цитировать сообщение
Admin
сообщение 31.5.2013, 7:20
Сообщение #4


Администратор
***

Группа: Главные администраторы
Сообщений: 270
Регистрация: 18.12.2007
Из: Саратов
Пользователь №: 1



Выше был приведен php скрипт, позволяющий брать данные с NTP-сервера (скрипт работает только на UNIX операционной системе).

Ответ от скрипта - строка в формате UNIX TIMESTAMP, которую посредством php функции date() приводят в вид, понятный для JS.

Далее создается объект var TimeNTP1 = new Date(x), и вместо x подставляется ответ от функции date(), как показано выше.

Таким образом, объект TimeNTP1 будет содержать время, полученное с NTP-сервера. И его можно будет использовать в вашем JS приложении.


--------------------


Перейти в начало страницы
 
+Цитировать сообщение
Tsu
сообщение 4.6.2013, 19:49
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 2
Регистрация: 22.5.2013
Пользователь №: 2018



Спасибо большое! разобрался.

Но возникла такая ситуация, что функция popen() закрыта хостером, без нее каким-либо способом можно обойтись?

Заранее спасибо!
Перейти в начало страницы
 
+Цитировать сообщение
Admin
сообщение 5.6.2013, 21:14
Сообщение #6


Администратор
***

Группа: Главные администраторы
Сообщений: 270
Регистрация: 18.12.2007
Из: Саратов
Пользователь №: 1



Цитата(Tsu @ 4.6.2013, 20:49) *
Спасибо большое! разобрался.

Но возникла такая ситуация, что функция popen() закрыта хостером, без нее каким-либо способом можно обойтись?

Заранее спасибо!

Существуют аналогичные функции, такие как: shell_exec(), exec() и обратные кавычки, вида $ret = `команда`;. Однако, если хостер закрыл функцию popen(), наверняка и остальные функции по работе с процессами - также закрыты.

В вашем случае скорее всего придется работать напрямую с NTP-протоколом на php. Например, на основе клссса https://github.com/majetzx/ntplite или аналогичного. Конечно, этот метод потребует определенных знаний в области протокола NTP и сокетов php.


--------------------


Перейти в начало страницы
 
+Цитировать сообщение
bulkashev
сообщение 13.8.2013, 20:53
Сообщение #7


Новичок
*

Группа: Пользователи
Сообщений: 1
Регистрация: 13.8.2013
Пользователь №: 2080



Помогите пожалуйста, очень нужно установить часы с синхронизацией с сервера, я не пойму какой код в какой файл, честно скажу все понимаю кроме php, какие файлы залить на хостинг, чтобы часы работали, и как вызвать $result & $js_date в коде с помощью какого файла, или же прописать команду на хостинге. PLEASE sad.gif
Перейти в начало страницы
 
+Цитировать сообщение
Admin
сообщение 15.8.2013, 0:49
Сообщение #8


Администратор
***

Группа: Главные администраторы
Сообщений: 270
Регистрация: 18.12.2007
Из: Саратов
Пользователь №: 1



Без знания и понимания php данную задачу решить не сможете.


--------------------


Перейти в начало страницы
 
+Цитировать сообщение
ShilovAlexx
сообщение 23.2.2015, 1:57
Сообщение #9


Новичок
*

Группа: Пользователи
Сообщений: 1
Регистрация: 10.2.2015
Из: land
Пользователь №: 3210



а не подскажите как ставится библиотека?И что это такое?


--------------------
.
Перейти в начало страницы
 
+Цитировать сообщение
Admin
сообщение 24.2.2015, 15:11
Сообщение #10


Администратор
***

Группа: Главные администраторы
Сообщений: 270
Регистрация: 18.12.2007
Из: Саратов
Пользователь №: 1



Цитата(ShilovAlexx @ 23.2.2015, 1:57) *
а не подскажите как ставится библиотека?И что это такое?

В этом посте я рассказывал как использовать данную библиотеку для получения Timestamp с NTP-сервера: http://forum.hsdn.org/index.php?s=&sho...post&p=2205


--------------------


Перейти в начало страницы
 
+Цитировать сообщение

Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 23.6.2017, 21:49
Материалы сайта предназначены для лиц 12 лет и старше.
HSDN — Рейтинг сайтов