Publié le 16/06/2010
Auteur fobec
Réseaux sociaux
0 partages
0 tweets
0 plus
0 commentaires

Mettre a jour la date via un serveur NTP

Lorsque l'heure du serveur doit ętre exacte, la date est synchronisée régulièrement en interrogeant les serveurs de temps. Avec le langage PHP, la fonction fsockopen établit une communication NTP pour récupérer le précieux TimeStamp.

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.

Ajouter un commentaire

Les champs marqués d'un * sont obligatoires, les adresses emails se sont pas publiées.

A lire aussi

Réseaux sociaux
Présentation de l'article
Catégorie
php5 - script
Mise a jour
16/06/2010
Visualisation
vu 1728 fois
Public
Internaute
Auteur de la publication
Fobec
Admin
Auteur de 261 articles
|BIO_PSEUDO|
Commentaires récents

Publié par Axel dans java

Bonjour Kezouille,
je viens de tester sur notre LAN (serveur Windows 7), la surveillance a l'air de marcher.
De votre cote, s'agit-il d'un serveur sous Windows ou sous Linux ?
Pouvez-vou...

Publié par dinet dans CMS

merci, chokran, thank you

Publié par MasterMbg dans java

Salut! merci pour le code, si tu y ajoutais des commentaires avant chaque module ce serait encore plus facilitant! merci infiniment...

Publié par Fobec dans php5

a priori il manque simplement le R dans le nom de la constante
PDO::ATTR_ERRMODE en remplacement de PDO::ATT_ERRMODE

Publié par D&Atilde;&copy;butant dans CMS

merci , et bon courage pour d'autre programme