Одним из первых протоколов точного времени, используемым на компьютерах, был DAYTIME (RFC 867), предназначенный для сообщения даты и времени в понятном человеку виде. Формат ответа DAYTIME строго не регламентируется и не предназначен для машинной обработки — предполагается лишь, что человеку, прочитавшему полученную строку, станет ясно текущее время.
Реализуем простую функцию для получения точного времени:
function queryTimeServer ($timeserver, $socket) {
$timevalue = 0;
$ret = array();
$fp = @fsockopen($timeserver,$socket,$err,$errstr,5);
if ($fp) {
fputs($fp,"n");
$timevalue = fread($fp,49);
fclose($fp);
}
$ret['time'] = $timevalue;
$ret['errno'] = $err;
$ret['errstr'] = $errstr;
return $ret;
}
Используем, например, так:
// По умолчанию берем время с нашего сервера
$timevalue = time();
// Если запрос к NTP успешен - берем время из него
$timercvd = queryTimeServer("pool.ntp.org", 13);
if (!$timercvd['errno'] && $timercvd['time'] > 0) {
$timevalue = strtotime($timercvd[0]);
}
echo "<p>Точное время: {$timevalue}</p>";
Для получения точного времени помимо pool.ntp.org также можно использовать следующие сервера:
- time.windows.com
- time.nist.gov
- time-a.nist.gov
- time-b.nist.gov
- time-a.timefreq.bldrdoc.gov
- time-b.timefreq.bldrdoc.gov
- time-c.timefreq.bldrdoc.gov
Не следует путать daytime protocol RFC 867 с NTP или time protocol RFC 868
Ссылки
Источник: https://www.kobzarev.com/programming/time-synchronization-with-ntp-server-in-php/