Vous vous apprêtez à lire un tutoriel rédigé par un membre de ce site. Malgré tout le soin que ce membre a pu apporter au tutoriel, nous ne pouvons pas garantir que les informations contenues sur cette page sont exactes à 100%. Merci de garder cela en tête lorsque vous lirez cette page ;o)
Vous voulez calculer le temps d'exécution de votre script, afin de pouvoir optimiser sa vitesse, mais vous ne savez pas comment faire ?
Heureusement, ce tutoriel est fait pour ça ! Je vous y explique dans un premier temps quelle fonction nous allons utiliser, puis les différentes méthodes pour PHP4 et PHP5.
Pour calculer le temps d'exécution des scripts, nous avons besoin d'une fonction maîtresse :
microtime().
Citation : Documentation PHPmixed microtime ( [bool get_as_float] )
Après lecture de la documentation au sujet de cette fonction, on comprend que la fonction microtime() renvoie le Timestamp, avec les microsecondes.
Pourquoi n'utilise-t-on pas la fonction
time() ?
Nous pourrions utiliser cette fonction, seulement, elle a un gros inconvénient par rapport à microtime() : elle n'est précise qu'aux secondes près. Or, la plupart des _bons_ scripts sont exécutés en moins de 0,1 seconde ! La fonction microtime() permet donc d'être un maximum précis.
Il y a une différence entre la fonction en PHP4 et en PHP5 ?
Justement, j'y viens !

Donc, oui, il y a une différence :
- en PHP4, la fonction nous retourne obligatoirement le temps sous cette forme : µsec sec, ce qui obligeait l'utilisateur à appliquer quelques fonctions sur la chaîne, afin d'avoir la forme sec.µsec ;
- en PHP5, on peut obtenir directement la forme sec.µsec : il suffit d'ajouter le paramètre true à la fonction, de cette façon : microtime(true)
Cette fonction retourne le Timestamp Unix. Par conséquent, si votre serveur est sous Windows, il se
peut que ce que microtime() retourne soit erroné !
Pour savoir si microtime() fonctionne sur votre serveur, il faut savoir si la fonction
gettimeofday() fonctionne !
Comment je sais si je suis en PHP4 ou PHP5 ?
Il existe une fonction très simple qui vous renseigne (entre autres) sur la version de PHP :
phpinfo(). Pour l'utiliser, il suffit de créer une page PHP vide, puis d'y insérer le code PHP suivant :
Code : PHP
Après exécution de la page, vous devriez obtenir une page comme celle-ci :
La plupart des informations données sont importantes, mais, dans notre cas, seule la
première l'est : la nomination de PHP par son numéro de version !

(Pour ceux qui ne voient pas, c'est ce que j'ai encadré en rouge, et indiqué par une flèche.

) Il vous suffit de lire ce numéro. S'il est noté 4.x.x, alors votre PHP est en version 4 ; s'il est noté 5.x.x, alors vous possédez la version 5 de PHP (ah, vous aviez deviné tout seuls ?)
Maintenant que vous savez tout ça, on peut rentrer dans le vif du sujet, le calcul du temps d'exécution de votre script !
Calcul du temps en PHP4
Venons-en à la pratique !
Comme nous sommes en PHP4, nous ne pouvons pas utiliser l'argument
true dans la fonction, donc nous devons fabriquer nous-mêmes ce nombre, avec les informations retournées par microtime().
Pour passer de la forme µsec sec à sec.µsec, il faudra couper le nombre retourné par microtime() là où il y a un espace, non ?
Oui, et il y a justement une fonction qui coupe une chaîne à un endroit précis ! Cette fonction est celle-ci :
explode().
Citation : Documentation PHParray explode ( string separator, string string [, int limit] )
On comprend donc qu'il faut 2 paramètres obligatoires : le caractère avec lequel on va couper notre chaîne, et la chaîne elle-même.
Le code PHP est donc :
Code : PHP1
2
3
4 | <?php
/* On coupe la chaîne retournée par microtime à l'endroit de l'espace */
$temps = explode(' ', microtime());
?>
|
J'ai essayé d'afficher $temps, mais ça m'affiche "Array" :'((((. Pourquoi ?
Si vous lisez attentivement la Documentation PHP à propos de cette fonction, vous verrez que explode retourne un Array() !
Si vous voulez afficher la variable $temps, vous devez utiliser une fonction spécifique qui affiche le contenu des arrays :
print_r().
Si j'ai bien compris, explode() retourne un array, et nous, nous voulons additionner les deux membres de l'array afin d'obtenir la valeur recherchée, c'est ça ?
Il existe une fonction qui additionne tous les membres d'un array.
Cette fonction est la suivante :
array_sum().
Citation : Documentation PHPnumber array_sum ( array array )
On voit donc que cette fonction retourne un nombre (la somme de tous les membres de l'array), et l'array en question.
Le code pour obtenir le temps dans la forme
sec.µsec en PHP4 est donc :
Code : PHP1
2
3
4 | <?php
/* On coupe la chaîne retournée avec explode(), puis on additionne les deux membres de l'array retourné avec array_sum() */
$temps = array_sum(explode(' ', microtime()));
?>
|
Un petit plus
Si vous devez calculer souvent le temps précis du temps avec microtime(), vous allez devoir à chaque fois utiliser ces trois fonctions !
Un petit avantage serait de faire une fonction qui ne prend pas d'argument, et qui retourne le microtime sous la forme correcte !
Vous pouvez la faire tout seuls, mais je vous la donne :
Code : PHP1
2
3
4
5 | <?php
function microtime_float() {
return array_sum(explode(' ', microtime()));
}
?>
|
C'est aussi simple que cela !
Calcul du temps d'exécution d'un script
Maintenant que l'on sait avoir le temps précis et correctement écrit, on va pouvoir passer au calcul du temps d'exécution du script !
Pour cela, vous allez devoir placer une variable qui contiendra le temps de départ du script, et une qui contiendra le temps de fin du script. (Logique, me direz-vous.

)
Ensuite, il suffira de faire une simple soustraction, et vous aurez le temps d'exécution du script.
Voici le code :
Code : PHP 1
2
3
4
5
6
7
8
9
10
11 | <?php
function microtime_float() {
return array_sum(explode(' ', microtime()));
}
$temps_debut = microtime_float();
/* Votre script ... */
/* Encore du code */
$temps_fin = microtime_float();
/* Affichage du temps d'exécution, arrondi à 4 chiffres après la virgule */
echo 'Temps d\'execution du script : '.round($temps_fin - $temps_debut, 4);
?>
|
Le code en PHP5 est beaucoup plus simple !
En effet, il vous suffira d'utiliser l'argument
true, et vous aurez directement la forme désirée :
sec.µsec
Le code est donc beaucoup plus court, et beaucoup plus simple :
Code : PHP1
2
3
4
5
6 | <?php
$temps_debut = microtime(true);
/* Du code ... */
$temps_fin = microtime(true);
echo 'Temps d\'execution : '.round($temps_fin - $temps_debut, 4);
?>
|