Temps de generations d'une page, OK mais... bug !!

Temps de generations d'une page, OK mais... bug !! - PHP - Programmation

Marsh Posté le 05-11-2002 à 14:52:39    

Voila je fais ceci pour calculer le temps de generation d'une page :
 
En debut de page :
 
$TmpDeb=microtime();
 
En fin de page :  
 
$TmpFin=microtime();
 
Le calcul :
 
$TmpGen=$TmpFin-$TmpDeb;
echo $TmpGen;

 
bref ca marche...
 
mais de temps en temps $TmpGen a une valeur negative !!!  :heink:  
 
Dans la plupart des cas je vois bien un truc du genre 29 milli seconde , etc... mais parfois il me sort -700 milliseconde , une fois sur 15 +- !!!
 
Qqun a une explication a ce bug?
 
 
Merci
 

Reply

Marsh Posté le 05-11-2002 à 14:52:39   

Reply

Marsh Posté le 05-11-2002 à 15:01:35    

tu devrais afficher $TmpDeb et $TmpFin pour comprendre ce qui se passe

Reply

Marsh Posté le 05-11-2002 à 15:04:07    

regarde dans le manuel en ligne, dans les commentaires y a un code pour faire ce que tu veux, mais le format de microtime ne te permets pas de faire une soustraction comme ca si je me rapelle bien, désolé  ;)


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 05-11-2002 à 15:07:55    

zion a écrit a écrit :

regarde dans le manuel en ligne, dans les commentaires y a un code pour faire ce que tu veux, mais le format de microtime ne te permets pas de faire une soustraction comme ca si je me rapelle bien, désolé  ;)  




Ok mais l'erreur devrait se produire dans 100% des cas alors!!! comprends po...
 
charlene>> t'as raison , je vais afficher les valeurs de Debut et fin pour voir...

Reply

Marsh Posté le 05-11-2002 à 15:14:13    

BOoooooooon
 
voila j'ai choppé la valeur de debut et de fin quand le bug se produit, et logiquement il est normal que ca ai une valeur negative: regardez :  
 
Page générée en -961.7 milli-secondes  
Debut : 0.99831700 1036505550
Fin : 0.03660200 1036505551

 
donc selon lui parfois, il fini la page avant de l'avoir commencé  [:rofl]  
 
 
 
 
 :heink:  
 
 
La je capte po... vraiment po...
 
 


Message édité par Schtroumpheur le 05-11-2002 à 15:16:31
Reply

Marsh Posté le 05-11-2002 à 15:23:13    

schtroumpheur a écrit a écrit :

 
Ok mais l'erreur devrait se produire dans 100% des cas alors!!! comprends po...
 
charlene>> t'as raison , je vais afficher les valeurs de Debut et fin pour voir...  




 
nan, nan,
 
certaines opérations ou fonctions peuvent renvoyer une valeur indéterminée quand elles ne sont pas utilisées exactement comme elles devraient l'être.
 
Le fait que ça soit indéterminé, fait que des fois les valeurs crachées seront dans l'intervalle de contrainte de fonctionnement de ton programme. Pas de plantage voir des affichages de résultats plus ou moins cohérent, mais pas forcément juste.
 
Un programme qui bogue n'est pas forcément un programme qui plante, c'est des programmes farceurs. Tu crois que tu l'as débogué et un jour ... paf le prog farceur frappe. Toujours très drole d'ailleurs :D

Reply

Marsh Posté le 05-11-2002 à 15:25:21    

barbarella a écrit a écrit :

 
 
nan, nan,
 
certaines opérations ou fonctions peuvent renvoyer une valeur indéterminée quand elles ne sont pas utilisées exactement comme elles devraient l'être.
 
Le fait que ça soit indéterminé, fait que des fois les valeurs crachées seront dans l'intervalle de contrainte de fonctionnement de ton programme. Pas de plantage voir des affichages de résultats plus ou moins cohérent, mais pas forcément juste.
 
Un programme qui bogue n'est pas forcément un programme qui plante, c'est des programmes farceurs. Tu crois que tu l'as débogué et un jour ... paf le prog farceur frappe. Toujours très drole d'ailleurs :D




 
Oué ca c'est sur,...
 
 
mais microtime() te renvois quoi exactement?  
Car je sais plus trop avec tout ca... :/

Reply

Marsh Posté le 05-11-2002 à 15:26:25    

sur php.net :  
 
My microtime function doesn't seem to know which way is up. I include a file in every script. The first line of code in the include file is
 
$begin_time = microtime();
 
A function within the include file is the LAST thing called during script execution. it says:
 
global $begin_time;
$total time = microtime() - $begin_time;
 
Now the outcome is (very strange) sometimes negative, sometimes positive. Always around 0.2 through -0.2.

Reply

Marsh Posté le 05-11-2002 à 15:27:35    

Simple function to return the absolute difference between two microtime strings.
 
  function microtime_diff($a,$b) {
    list($a_micro, $a_int)=explode(' ',$a);
     list($b_micro, $b_int)=explode(' ',$b);
     if ($a_int>$b_int) {
        return ($a_int-$b_int)+($a_micro-$b_micro);
     } elseif ($a_int==$b_int) {
        if ($a_micro>$b_micro) {
          return ($a_int-$b_int)+($a_micro-$b_micro);
        } elseif ($a_micro<$b_micro) {
           return ($b_int-$a_int)+($b_micro-$a_micro);
        } else {
          return 0;
        }
     } else { // $a_int<$b_int
        return ($b_int-$a_int)+($b_micro-$a_micro);
     }
  }

 
comprends pas trop pq il faut faire tout ca

Reply

Marsh Posté le 05-11-2002 à 15:30:13    

ben,
 
en php je ne sais pas, mais en C tu peux utiliser  
 
ftime(&temps1);
....
ftime(&temps2);
vax = diftem(temps1,temps2); :D
 
désolé, il te faut un utilisateur PHP pour plus d'info

Reply

Marsh Posté le 05-11-2002 à 15:30:13   

Reply

Marsh Posté le 05-11-2002 à 15:36:40    

barbarella a écrit a écrit :

ben,
 
en php je ne sais pas, mais en C tu peux utiliser  
 
ftime(&temps1);
....
ftime(&temps2);
vax = diftem(temps1,temps2); :D
 
désolé, il te faut un utilisateur PHP pour plus d'info
 




OK merci quand meme,  :D

Reply

Marsh Posté le 05-11-2002 à 15:56:09    

T'as essayé avec mktime() à la place de microtime() ?


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 05-11-2002 à 15:56:35    

C'est écrit texto:
 
 Returns the string "msec sec"
 
donc ton calcul c'est n'importe quoi, tu dois séparer les valeurs et faire un joli calcul, mais la valeur à gauche c'est les msec.
 
 :hello:


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 05-11-2002 à 15:59:41    

Ah uiiiiiiiiii, vala, c'est ça. Fallait juste bien lire la doc, en fait :D


---------------
Everyone thinks of changing the world, but no one thinks of changing himself  |  It is the peculiar quality of a fool to perceive the faults of others and to forget his own  |  Early clumsiness is not a verdict, it’s an essential ingredient.
Reply

Marsh Posté le 05-11-2002 à 16:01:37    

zion a écrit a écrit :

C'est écrit texto:
 
 Returns the string "msec sec"
 
donc ton calcul c'est n'importe quoi, tu dois séparer les valeurs et faire un joli calcul, mais la valeur à gauche c'est les msec.
 
 :hello:  




 
 
Ha ouéééé, mince alors, merci de me l'avoir faire remarqué :)
 
Bon ben j'ai pigé le bug alors !!! quand le nombre de seconde sont pas les meme c'est logique qu'il sorte une valeur negative alors, en effet c du portenawak mon machin !!!
 
Merci  :jap:

Reply

Marsh Posté le 05-11-2002 à 16:02:30    

J'avais dit de lire la doc  :ange:  
 
Y a même un comment avec un script tout fait  :D


---------------
Informaticien.be - Lancez des défis à vos amis
Reply

Marsh Posté le 05-11-2002 à 16:05:30    

zion a écrit a écrit :

J'avais dit de lire la doc  :ange:  
 
Y a même un comment avec un script tout fait  :D  




 
:/

Reply

Marsh Posté le 05-11-2002 à 16:13:58    

moi j'ai repiqué ca :
 
 

function getmicrotime()
{
 list($usec, $sec) = explode(" ",microtime());
 return ((float)$usec + (float)$sec);
}
 
 
$time_start = getmicrotime();
$time_end = getmicrotime();
$time = $time_end - $time_start;


---------------
oui oui
Reply

Marsh Posté le 05-11-2002 à 16:19:41    

Bon ben voila j'ai fait unetite fonction toute simple  
 

Code :
  1. function SubtractMicrotime($mt1, $mt2)
  2. {
  3. $mt1=explode(" ",$mt1);
  4. $mt2=explode(" ",$mt2);
  5. $RealTime1=$mt1[1]+$mt1[0];
  6. $RealTime2=$mt2[1]+$mt2[0];
  7. return $RealTime2-$RealTime1;
  8. }


 
et ca marche tres bien merci !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed