Jak pobrać aktualny czas za pomocą potokołu TIME z serwerów będących wzorcami czasu, PHP Skrypty


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

0x01 graphic

Chcesz pobrać aktualny czas za pomocą protokołu TIME 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ół TIME i działającej na porcie 37 serwera udostępniającego czas.

Serwery takie udostępniają aktualny czas w postaci 32-bitowego znacznika czasu określającego ilość sekund, jaka upłynęła od daty 1900.01.01 00:00:00 UTC. Mając taki znacznik można łatwo wyciągnąć dzień, godzinę czy minutę aby dowolnie obrabiać datę i pokazywać ją w formacie jaki tylko zechcemy.

Pobierzmy aktualną datę i przedstawmy ją w postaci: YYYY.MM.DD GG:MM:SS.

<?

$f = fsockopen("ntp.task.gda.pl",37);

if ($f) {

$czas = fread($f,100);

fclose($f);

$czas=hexdec(bin2hex($czas));

$czas = date("Y-m-d H:i:s",$czas-2208988800);

} 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 37. Jeżeli udało się wykonać połączenie, pobieramy np. 100 znaków 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.

Pobrane znaki zapisane są na 32 bitach, a więc zajmują 4 bajty (4 znaki). Musimy je przekonwertować za pomocą bin2hex() z wersji binarnej na szesnastkową aby dała się wyświetlić na ekranie, a najlepiej od razu zamienić ją do liczby dziesiętnej stosując funkcję hexdec().

Mamy już znacznik czasu w postaci dziesiętnej, czyli liczbę sekund od roku 1900. Ponieważ znacznik czasu w systemach Unix i w PHP zaczyna się od roku 1970, musimy odjąć od aktualnej daty 70 lat (2208988800 sekund) aby otrzymać znacznik nadający się do stosowania w funkcjach czasu PHP.

Teraz wystarczy sformatować czas według dowolnych kryteriów i podać do funkcji date() wyliczony znacznik, aby uzyskać datę na podstawie danych z serwera czasu.

Problemem może okazać się znalezienie działających serwerów czasu, oto kilka z nich: ntp.task.gda.pl, ntp.icm.edu.pl, time.nrc.ca, time.ien.it.



Wyszukiwarka

Podobne podstrony:
Jak pobrać aktualny czas za pomocą potokołu DAYTIME z serwerów będących wzorcami czasu, PHP Skrypty
Jak stroić CB radio za pomocą SWR miarki
002 Jak określić odległość rzeczywistą za pomocą podziałki liniowejid 2235 pptx
Layer czyli jak grać kilkoma instrumentami za pomocą jedne
02 Jak określić rzeczywistą odległość za pomocą skaliid 3636 pptx
Jak zabezpieczyć własne strony przed pobieraniem ich programami do ściągania całych witryn, PHP Skry
Jak uruchomić skrypt znajdujący się na innym serwerze za pomocą aktualnie wykonywanego skryptu
Jak za pomocą PHP pobrać nazwy tabel dostępne w wybranej bazie danych, PHP Skrypty
Jak kontrolować komputer za pomocą głosu
Jak uszczelniać za pomocą silikonu(1)
Jak uruchomić komputer za pomocą ostatniej znanej dobrej konfiguracji
jak za pomoca skryptu php umiescic w?zie kopie?nych utworzona wczesniej przez mysqldump
Jak wstawić link graficzny na blog za pomocą kodu HTML
Jak zaktualizować?shboard za pomocą pendrive
Hipnotyzm slowa Jak podbijac umysly Twoich klientow za pomoca perswazyjnych tekstow hipslo (2)
jak przemawiac do ludzi (jakies referaty jak czytac itp zeby bylo ciekawie) otworz za pomoca ADOBE R
Jak wstawić link na blog za pomocą kodu HTML
Czas Past Continuous tworzy się za pomocą czasownika posiłkowego? w czasie Past Simplex

więcej podobnych podstron