Serveur NTP (Network Time Protocol)
NTP est le protocole utilisé pour communiquer avec ces serveurs en ligne, eux-mêmes reliés à des horloges atomiques. Le format d'échange est commun au monde entier : UTC (Coordinated Universal Time).Exemples de serveurs NTP publics:
- ntp.laas.fr (LAAS/CNRS, Toulouse),
- ntp.u-psud.fr (CRI, Université Paris Sud),
- ntp2.emn.fr (Ecole des Mines, Nantes).
La communication passe par le port 123 ou le port 37.
Script PHP d'interrogation d'un serveur de temps
A l'aide d'une requête PHP, le script ci-dessous prend en charge les fonctions suivantes:- interroger le serveur avec les sockets sur le port 37,
- convertir la réponse en timestamp,
- Afficher l'heure et la date au format francais.
<?php
define('NTP_SERVER',"ntp2.emn.fr");
/**
* Interroger le serveur ntp avec une connection socket sur le port 37
* @return timestamp
*/
function getTimeStamp() {
$fp = fsockopen(NTP_SERVER, 37);
if (!$fp) {
return 0;
} else {
fputs($fp,"n");
$buf = fread($fp,49);
fclose($fp); # close the connection
$time = bin2hex ($buf);
$time = abs (HexDec('7fffffff') - HexDec($time) - HexDec('7fffffff')) ;
return $time - 2208988800;
}
}
$timestamp=getTimeStamp();
/**
* Formater la date au format UTC et francais
*/
echo 'Reponse du serveur '.NTP_SERVER.': '.$timestamp.'<br>';
echo 'Date UTC: '.date("Y-m-d (D) H:i:s",$timestamp - date("Z",$timestamp)).'<br>';
echo 'Date francaise: le '.date("d/m/Y",$timestamp).' il est exactement '.date("H:i:s",$timestamp).'<br>';
?>
D'une manière générale, le développeur utilise la fonction microtime() pour connaitre l'heure à partir du serveur sur lequel s’exécute le script. Si l'on veut justement synchroniser l'heure de son serveur ou utiliser des fonctions de cryptage, une communication NTP peut être intéressante.