Помощь - Поиск - Пользователи
Полная версия этой страницы: Получить точное время от серверов
Форум проекта HSDN > Проекты > NTP-серверы
kroncentr
это нужно для правильного отображения времени на часах на одном моем сайте. В идеале хотелось бы получить результат, который дает javascript объект "new Date()" и с ним работать)

Спасибо!)
Admin
Получать можно по 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
Добрый вечер!

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

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

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

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

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

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

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

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

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

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

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

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

В вашем случае скорее всего придется работать напрямую с NTP-протоколом на php. Например, на основе клссса https://github.com/majetzx/ntplite или аналогичного. Конечно, этот метод потребует определенных знаний в области протокола NTP и сокетов php.
bulkashev
Помогите пожалуйста, очень нужно установить часы с синхронизацией с сервера, я не пойму какой код в какой файл, честно скажу все понимаю кроме php, какие файлы залить на хостинг, чтобы часы работали, и как вызвать $result & $js_date в коде с помощью какого файла, или же прописать команду на хостинге. PLEASE sad.gif
Admin
Без знания и понимания php данную задачу решить не сможете.
ShilovAlexx
а не подскажите как ставится библиотека?И что это такое?
Admin
Цитата(ShilovAlexx @ 23.2.2015, 1:57) *
а не подскажите как ставится библиотека?И что это такое?

В этом посте я рассказывал как использовать данную библиотеку для получения Timestamp с NTP-сервера: http://forum.hsdn.org/index.php?s=&sho...post&p=2205
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Русская версия IP.Board © 2001-2020 IPS, Inc.