2010-04-09 5 views
40

Pour un profilage très simple que j'utilise microtime() comme ceci:Profilage PHP avec microtime(): temps négatif?

$now = microtime(); 
for (...) { 
    // do something 
    echo microtime() - $now; 
    $now = microtime(); 
} 

Maintenant, la sortie de la ligne echo semble complètement aléatoire, qui est, je m'y attendais fluctuations, mais je ne pas attendre nombres négatifs apparaissant.

Cependant, un résultat typique contient ~ 1/3 nombres négatifs. Je l'ai confirmé sur Solaris (PHP 5.0.x) et WinVista (PHP 5.2.3).

Que diable se passe-t-il ici? Ai-je inventé accidentellement une machine à remonter le temps?

+4

Oui U ont !!!!! :) Faites-moi savoir pour le contrôler .... –

+1

c'est quelque chose que j'ai remarqué aussi, mais jamais pris la peine d'enquêter, je suis curieux de l'anwser :) – ChrisR

Répondre

60

Si vous souhaitez effectuer des opérations sur ce qui est renvoyé par microtime, vous devez définir le paramètre "get as float" sur true (par défaut, il est faux).

http://www.php.net/manual/en/function.microtime.php

$now = microtime(true); 
for (...) { 
    // do something 
    echo microtime(true) - $now; 
    $now = microtime(true); 
} 
+2

Clé pour contrôler le temps Machine !!!! –

+2

Oui, oui. Lire la documentation aide parfois. Merci d'avoir répondu! – Boldewyn

+14

Pour compléter la réponse d'Arkh: La réponse de 'microtime()' sans 'get_as_float' est la * chaîne *' sprintf ('% f% d', $ microseconds, time()) '. Dans quelles circonstances quelqu'un aura-t-il besoin de cette représentation? – Boldewyn