Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1802 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Lecture de date aléatoire.

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Lecture de date aléatoire.

n°1429712
Joseph75
Posté le 22-08-2006 à 23:56:00  profilanswer
 

Bonsoir à tous.
 
Avant tout, et sans vouloir user de flatterie, bravo pour la qualité de vos réponses aux questions posées.
 
J'ai une question à poser qui, il me semble, n'a pas été traitée sur le forum et me pose problème.
J'ai créé un script Perl sous forme de modulle qui est sensé me donner la date et l'heure de mon serveur Apache.
Mais au lieu de donner l'heure en cours, il me renvoie une heure d'une page précédente.
 
Mais pour comprendre voici les fichiers :
 
** Module Perl **
**************

Code :
  1. #################################################
  2. # Module de traitement de la date et de l'heure #
  3. # locale.                                       #
  4. #################################################
  5. #         -- Fichier DateEdition.pm --          #
  6. #              -- Version HTML --               #
  7. #################################################
  8. # Créé le 12/08/2006
  9. # Mis à jour le 18/08/2006 --> Modification mineure par ajout du zéro avant le chiffre
  10. #                          --> des minutes et des secondes si <10.
  11. #
  12. #
  13. package DateEdition;
  14. my @alphajour=("dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi" );
  15. my @alphamois=("janvier","f&eacute;vrier","mars","avril","mai","juin","juillet","ao&ucirc;t","septembre","octobre","novembre","d&eacute;cembre" );
  16. my ($secondes,$minutes,$heure,$jmois,$mois,$annee1900,$jsemaine,$jannee,$hsaison) = "";
  17. my ($annee);
  18. local ($DtActuelle,$HrActuelle) = "";
  19. ($secondes,$minutes,$heure,$jmois,$mois,$annee1900,$jsemaine,$jannee,$hsaison)=localtime(time);
  20. # Ajout du zéro avant le chiffre des minutes et des secondes si < 10.
  21. if ($secondes<10)
  22.   {
  23.    $secondes = "0".$secondes;
  24.   }
  25. if ($minutes<10)
  26.   {
  27.    $minutes = "0".$minutes;
  28.   }
  29. # Mise à niveau de l'année.
  30. $annee = $annee1900 + 1900;
  31. # Traitement de la date.
  32. sub DtLocale
  33. {
  34. $DtActuelle = $alphajour[$jsemaine]." ".$jmois." ".$alphamois[$mois]." ".$annee;
  35. return ($DtActuelle);
  36. }
  37. # Traitement de l'heure.
  38. sub HrLocale
  39. {
  40. if ($hsaison==1)
  41.   {
  42.    $HrActuelle = $heure."h".$minutes."m".$secondes."s, heure locale d'&eacute;t&eacute;";
  43.   }
  44. else
  45.   {
  46.    $HrActuelle = $heure."h".$minutes."m".$secondes."s, heure locale d'hiver";
  47.   }
  48. return($HrActuelle);
  49. }
  50. 1;


** Affichage Date et Heure sur la console **
**********************************

Code :
  1. #!/usr/bin/perl -w
  2. use DateEdition;
  3. my ($DateLocale,$HeureLocale)=" ";
  4. DEBUT:
  5. $DateLocale  = &DateEdition::DtLocale;
  6. $HeureLocale = &DateEdition::HrLocale;
  7. print "\n";
  8. print "Nous sommes le ".$DateLocale." et il est ".$HeureLocale."\n\n";
  9. goto DEBUT;
  10. exit (0);


** Affichage Date et Heure dans document HTML **
***************************************

Code :
  1. #!/usr/bin/perl -w
  2. #
  3. # AfficheDateHTML.html
  4. #
  5. # Version 1.01
  6. # Script créé le 22/08/2006.
  7. #
  8. #
  9. use DateEdition;
  10. my ($DateLocale,$HeureLocale)=" ";
  11. # Génération de la date et l'heure.
  12. $DateLocale = &DateEdition::DtLocale;
  13. $HeureLocale = &DateEdition::HrLocale;
  14. # Corps du Script d'affichage des données.
  15. # En-tête de page HTML.
  16. print <<PAGE_HTML;
  17. Content-type:text/html
  18. <html>
  19. <head>
  20.   <title>Affiche la date et l'heure locale du serveur</title>
  21.    <meta name=\"author\" content=\"Joseph75\">
  22.    <meta http-equiv=\"pragma\" content=\"no-cache\">
  23.    <meta http-equiv=\"content-type\" content=\"text/html;charset=iso-8859-1\">
  24. </head>
  25. <body>
  26. <center>
  27.   <b>Affiche la date et l'heure locale du serveur.</b>
  28. </center>
  29. <hr>
  30. <center>
  31.   <b>Liste g&eacute;n&eacute;r&eacute;e le $DateLocale &agrave; $HeureLocale.</b>
  32. </center>
  33. </body>
  34. </html>
  35. PAGE_HTML
  36. exit(0);


Voilà les 3 fichiers.
Si quelqu'un a une idée ou des idées, alors je suis preneur car je sèche depuis quelques (10) jours.
 
Le phénomène est aussi visible si on modifie le code avec la version entourée par les goto.
 
Merci d'avance à vous tous et encore bravo.

Message cité 1 fois
Message édité par Joseph75 le 23-08-2006 à 00:21:32
mood
Publicité
Posté le 22-08-2006 à 23:56:00  profilanswer
 

n°1429789
Elmoricq
Modérateur
Posté le 23-08-2006 à 09:50:48  profilanswer
 

Joseph75 a écrit :

Mais au lieu de donner l'heure en cours, il me renvoie une heure d'une page précédente.


 
Peux-tu être plus précis ?

n°1429823
Danjer
Posté le 23-08-2006 à 11:31:54  profilanswer
 

Elmoricq a écrit :

Peux-tu être plus précis ?


En fait il a l'heure du chargement du module...


---------------
Cdl, Danjer
n°1429895
franceso
Posté le 23-08-2006 à 14:08:56  profilanswer
 

Danjer a écrit :

En fait il a l'heure du chargement du module...

C'est normal : tu évalues la fonction localtime une seule fois au chargement du module. Lors de tes appels ultérieurs aux fonctions HrLocale et DtLocale, tu ne fais que retourner l'heure/la date qui a été calculée au chargement.
Tu devrais encapsuler les lignes 21 à 36 dans une fonction qui serait appelée au début de HrLocale et de DtLocale pour récupérer la "vraie" heure/date courante.


---------------
TriScale innov
n°1430007
Joseph75
Posté le 23-08-2006 à 15:35:15  profilanswer
 

Bonjour et merci pour vos réponses.
 
francesco, tu sous-tendrais qu'il faudrait que j'inclus

Code :
  1. use DateEdition;
  2. $DateLocale = &DateEdition::DtLocale;
  3. $HeureLocale = &DateEdition::HrLocale;
  4. print "Nous sommes le ".$DateLocale." et il est ".$HeureLocale."\n\n";


dans la boucle  
DEBUT:
 
goto DEBUT;
 
ou dans toute autre pour que la valeur soit re-calculée à chaque passage sur
use DateEdition ? Sinon, dans l'immédait, je ne vois pas comment faire.
 
Pour répondre aux deux autres questions, l'appel au module - DateEdition - est
inclus dans un script cgi-Perl du serveur Apache et il n'est << appelé >> que
lorsque l'on clique sur le lien mis sur ladite page.
 
Pour exemple <a href="/cgi-bin/AfficheDateHTML.pl">Affiche la date et l'heure</a>
 
Le recalcul ne se fait-il pas systématiquement lors de l'appel du script ?
 
Merci de vos réponses.

n°1430017
Elmoricq
Modérateur
Posté le 23-08-2006 à 15:42:34  profilanswer
 

De fait je n'avais pas fait attention que c'était un module que tu appelais.
 
Comme le dit franceso, la ligne :

($secondes,$minutes,$heure,$jmois,$mois,$annee1900,$jsemaine,$jannee,$hsaison)=localtime(time);


 
Il faut la déplacer/copier dans les fonctions DtLocale et HrLocale, autrement les variables sont initialisées une bonne fois pour toute au chargement du module, et jamais rafraîchies.

n°1430037
Danjer
Posté le 23-08-2006 à 16:03:52  profilanswer
 

Elmoricq a écrit :

... les variables sont initialisées une bonne fois pour toute au chargement du module, et jamais rafraîchies.


 
Ou dans le cas de ton CGI quand :  
  - apache est redemarre
  - si le fichier de ton module change (je me souviens plus... je crois)


---------------
Cdl, Danjer
n°1430039
franceso
Posté le 23-08-2006 à 16:07:35  profilanswer
 

Joseph75 a écrit :

francesco, tu sous-tendrais qu'il faudrait que j'inclus [...] dans la boucle

Non, il faut que tu règles le problème dans ton module lui-même, pas dans le script qui y fait appel.
 
Dans le code de ton module, il faut que modifies les fonctions DtLocale et HrLocale pour qu'elles appellent elles-mêmes la fonction localtime(). Tes scripts incluant le module ne doivent pas être modifiés.


---------------
TriScale innov
n°1430044
Joseph75
Posté le 23-08-2006 à 16:11:10  profilanswer
 

Merci,
 
c'est justement ce que je viens de faire et voici le code :
 

Code :
  1. #################################################
  2. # Module de traitement de la date et de l'heure #
  3. # locale.                                       #
  4. #################################################
  5. #         -- Fichier DateEdition.pm --          #
  6. #              -- Version HTML --               #
  7. #################################################
  8. # Créé le 12/08/2006
  9. # Mis à jour le 18/08/2006 --> Modification mineure par ajout du zéro avant le chiffre
  10. #                          --> des minutes et des secondes si <10.
  11. # Mis à jour le 23/08/2006 --> Modification majeure sur le traitement de localtime.
  12. #
  13. package DateEdition;
  14. my @alphajour=("dimanche","lundi","mardi","mercredi","jeudi","vendredi","samedi" );
  15. my @alphamois=("janvier","f&eacute;vrier","mars","avril","mai","juin","juillet","ao&ucirc;t","septembre","octobre","novembre","d&eacute;cembre" );
  16. my ($secondes,$minutes,$heure,$jmois,$mois,$annee1900,$jsemaine,$jannee,$hsaison) = "";
  17. my ($annee);
  18. local ($DtActuelle,$HrActuelle) = "";
  19. # Traitement de la date.
  20. sub DtLocale
  21. {
  22. ($secondes,$minutes,$heure,$jmois,$mois,$annee1900,$jsemaine,$jannee,$hsaison)=localtime(time);
  23. # Mise à niveau de l'année.
  24. $annee = $annee1900 + 1900;
  25. $DtActuelle = $alphajour[$jsemaine]." ".$jmois." ".$alphamois[$mois]." ".$annee;
  26. return ($DtActuelle);
  27. }
  28. # Traitement de l'heure.
  29. sub HrLocale
  30. {
  31. ($secondes,$minutes,$heure,$jmois,$mois,$annee1900,$jsemaine,$jannee,$hsaison)=localtime(time);
  32. # Ajout du zéro avant le chiffre des minutes et des secondes si < 10.
  33.   if ($secondes<10)
  34.    {
  35.     $secondes = "0".$secondes;
  36.    }
  37.   if ($minutes<10)
  38.    {
  39.     $minutes = "0".$minutes;
  40.    }
  41. if ($hsaison==1)
  42.   {
  43.    $HrActuelle = $heure."h".$minutes."m".$secondes."s, heure locale d'&eacute;t&eacute;";
  44.   }
  45. else
  46.   {
  47.    $HrActuelle = $heure."h".$minutes."m".$secondes."s, heure locale d'hiver";
  48.   }
  49. return($HrActuelle);
  50. }
  51. 1;


Si çà peut servir à quelqu'un ...
Merci à vous tous.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Lecture de date aléatoire.

 

Sujets relatifs
date auto/ mysqldate sur base mysql phpbb
Afficher la datepb lecture video flash avec IE
Problème date et graphique lecture de matrice et problème de flux entre C++ et VB
Delphi : Problème de format de dateLecture fichier texte UTF-8
[SQL SERVER 05][SSIS] Pb insert champ dateProblème sur un flux de lecture à partir d'un fichier .txt
Plus de sujets relatifs à : Lecture de date aléatoire.


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR