[PHP] Jak pobrać aktualny czas za pomocą potokołu DAYTIME z serwerów będących wzorcami czasu?

0x01 graphic

Chcesz pobrać aktualny czas za pomocą protokołu DAYTIME z serwerów będących wzorcami czasu.

0x01 graphic

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.