Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум проекта HSDN _ NTP-серверы _ Получить точное время от серверов

Автор: kroncentr 22.3.2013, 10:06

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

Спасибо!)

Автор: Admin 26.3.2013, 6:42

Получать можно по 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/_js/timebox.js.
Используется он на странице http://www.stratum1.ru

Удачи!

Автор: Tsu 22.5.2013, 21:50

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

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

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

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

Буду очень признателен ответу!

Автор: Admin 31.5.2013, 7:20

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

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

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

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

Автор: Tsu 4.6.2013, 19:49

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

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

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

Автор: Admin 5.6.2013, 21:14

Цитата(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

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

Автор: Admin 15.8.2013, 0:49

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

Автор: ShilovAlexx 23.2.2015, 1:57

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

Автор: Admin 24.2.2015, 15:11

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

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

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)