Suivant les systèmes les fichiers logs sont en horaire GMT, ce qui ne facilite pas leur lecture si vous avez besoin de traiter ces données ou les insérer dans une base de données. Dans mon cas j'avais besoin de récupérer un log sur pfSense.
Dans l'interface web de pfSense les logs sont bien dans le bon fuseau horaire (timzeone), celui de Paris. Sauf que dans le fichier brut (*.log) ce n'est pas le cas, ils sont en GMT. J'ai donc cherché un peu pour savoir comment les développeurs de pfSense avaient fait pour convertir l'heure. J'ai trouvé cette fonction dans /usr/local/www/status_dhcp_leases.php que j'ai un poil modifiée :
date_default_timezone_set('Europe/Paris'); function adjust_gmt($datetime) { $ts = strtotime($datetime . " GMT"); return strftime("%Y-%m-%d %H:%M:%S", $datetime); } echo adjust_gmt('2015-04-11 12:34:30'); # retourne: 2015-04-11 14:34:30
J'ai opté pour le format YYYY-MM-DD parce que c'est celui qui est utilisé dans un champ MySQL/MariaDB de type datetime, en effet j'insère ensuite directement ce champ en base de données.
Comme vous le voyez c'est très simple, et ça gère automatiquement les changements d'heures hiver, été. Il suffit de déclarer votre fuseau horaire sur la première ligne (fuseaux europe ici).
note: les crédits du code source de pfSense vont à Electric Sheep Fencing, LP, Scott Ullrich qui l'a repris sur Manuel Kasper de m0n0wall (précurseur de pfSense abandonné début 2015)
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
4 commentaires
Code propre, Très pratique merci.
Petite erreur dans le code, dans le return la fonction strftime doit prendre en paramètre $ts et non $datetime, mais merci !
@matt: c'est une variable, son nom n'a pas d'importance
@Mr Xhark: Si il a raison, ce n'est pas une question de nom mais de variable appelée. En l’occurrence il faut que ce soit la variable défini $ts.
(Sinon, la page renvoie une erreur).