Le serveur MySql et Apache restent en heure UTC
Résolucocodu67... Messages postés 3178 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai changé de serveur tout en restant chez le même hébergeur afin de changer de plateforme de gestion de l'hébergement, ce n'est plus CPanel cette fois. Ce n'est pas un VPS mais pas un serveur dédié non plus même si la RAM et le CPU me sont réservés.
Auparavant sur CPanel, le serveur apache était à l'heure française, MySql aussi, PHP aussi. Maintenant on me dit que seul PHP peut être au fuseau horaire français, ce qui vient d'être réglé.
J'ai donc deux problèmes:
- J'ai des tâches cron qui doivent se lancer à une heure précise. Comment je gère ça ? Je peux les régler pour se lancer à 22h et comme l'heure UTC est inférieure de 2 heures à l'heure française, ça se lance à minuit heure française au changement de jour et le problème est réglé. Mais au changement d'heure, vu que UTC ne change pas, on aura plus 2 heures de décalage mais une seule. J'ignore comment faire pour que ce soit le moins casse tête possible.
- J'utilise parfois NOW() dans mes requêtes Sql. Je peux changer ça et utiliser (NOW() + INTERVAL 2 HOUR) mais comment gérer ça vu que parfois ce ne sera pas + 2 heures mais à priori une heure une fois qu'on sera retourné en heure d'hiver ?
Merci d'avance
1 réponse
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
Pour ton second problème, moi je n'utiliserais pas le NOW SQL, je calculerais plutôt le moment en PHP, et j'utiliserais ce moment calculé dans la requête SQL.
Une autre façon de faire, ce serait d'enregistrer des moments UTC dans la base de données, plutôt que des moments en heure locale. La conversion se ferait lors des interactions avec l'utilisateur.
-
Bonjour,
Pour que ça fasse plus propre j'avais toujours utilisé NOW() mais en effet PHP permet très facilement d'obtenir la date et l'heure au même format que NOW().
Concernant les tâches cron qui doivent s'exécuter à un moment précis, j'ai une idée. Si une tâche doit se lancer le 1 du mois à 00h01 il est possible de la lancer chaque heure tous les jours et de vérifier en PHP (qui aura l'heure française) quand est-ce que le jour sera 1 et l'heure 0 et la minute 1, de mettre tout le code entre accolades et de vérifier avec un if si le moment est venu et de n'exécuter l'intérieur de la condition if que si c'est le bon jour et la bonne heure. Cela fait beaucoup d’exécutions inutiles mais bon ...Ah oui c'est vrai que si on retire une heure elle va s'exécuter deux fois. Dans mon cas ce n'est pas grave mais dans d'autres situations ça peut surement amener pas mal de problèmes.
En effet si le serveur s'arrête un moment et que la cron quotidienne ne s'est pas lancée il y a des choses qui risquent de ne pas fonctionner comme prévu.
Je vous remercie pour vos conseils.
-