Автор: 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 как они используются и самое главное как их правильно вывести?
Извиняюсь за ламерские вопросы
Буду очень признателен ответу!
Автор: 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
Автор: 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