Одним из первых протоколов точного времени, используемым на компьютерах, был 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/