[PHP] Jak pobrać aktualny czas za pomocą potokołu DAYTIME z serwerów będących wzorcami czasu?
Chcesz pobrać aktualny czas za pomocą protokołu DAYTIME z serwerów będących wzorcami czasu.
Aby uzyskać aktualny czas możesz wykorzystać specjalne serwery będące wzorcami czasu, które podają najdokładniejszy czas w Sieci. Są one synchronizowane z atomowymi wzorcami czasu.
Aby połączyć się z takimi serwerami możesz skorzystać z prostej usługi wykorzystującej protokół DAYTIME i działającej na porcie 13 serwera udostępniającego czas.
Serwery takie udostępniają aktualny czas w postaci ciągu znaków ASCII, np. "Tue Apr 29 22:20:56 2003". Można go odczytać w następujący sposób:
<?
$f = fsockopen("ntp.task.gda.pl",13);
if ($f) {
$czas = fread($f,100);
fclose($f);
} else {
$czas="Nie można nawiązać połączenia z serwerem";
}
echo "Aktualny czas: $czas";
?>
Za pomocą fsockopen() łączymy się z serwerem czasu na porcie 13. Jeżeli udało się wykonać połączenie, pobieramy np. 100 znaków (aby zawierały cały zapis dotyczący czasu) za pomocą funkcji fread() i zamykamy połączenie. Jeżeli nie, zmiennej $czas możemy przypisać jakiś komunikat mówiący o tym, że połączenie nie zostało zrealizowane.
Następnie wystarczy wypisać pobrany wiersz na ekran. Czas może mieć różny format, w zależności od serwera. Należy wybierać serwery lokalne (w naszej strefie czasowej), ponieważ pokazują one zwykle czas lokalny.
Pobrany tekst można oczywiście obrabiać i wycinać z niego samą godzinę lub dzień. Protokół DAYTIME jest bardzo prosty i jeżeli chcesz pobierać bardziej użyteczny znacznik, aby można było wygodniej przetwarzać czas, skorzystaj np. z protokołu TIME opisanego w następnej poradzie.
Problemem może okazać się znalezienie działających serwerów czasu, oto kilka z nich: ntp.icm.edu.pl, ntp.task.gda.pl, time.nrc.ca, time.ien.it.