Page 1 sur 1
Temps de génération de page et nb de requête sql éffectué
Posté : 21 mai 2007, 19:31
par djtec
Bonjour,
Je recherche un script qui marque le temps de génération d'une page php et le nombre de requête sql éffectué.
Après une longue recherche sur google ou je trouvait des scripts de temps de génération de page qui m'affichait une tonne de chiffre derière la virgule et pour le nombre de requêtes j'ai trouvé que celui de siteduzero mais il ne fonctionne pas il m'affiche toujours 0 requête.
Alors j'ai décidé de demander ici en espérant que quelqu'un puisse m'aider.
Merci d'avance...
Posté : 21 mai 2007, 19:48
par Hubert Roksor
Un tel script n'existe pas, en tout cas pas en tant que tel. Si tu utilises une couche d'abstraction à la base alors tu peux compter toi-même les requêtes que tu exécutes, mais il n'existe pas de tel mécanisme dans PHP.
Posté : 21 mai 2007, 19:50
par Klomac
C'est très simple :
- pour le temps de génération il faut faire appel à la fonction microtime() au début et à la fin de ton script, et soustraire la première à la dernière. Si les décimales t'embêtent, tu peux toujours utiliser number_format() pour en supprimer.
- pour les requêtes il suffit de créer une fonction (ou mieux, une classe) qui incrémente un compteur à chaque fois que tu l'appelle (et qui exécute ta requête en même temps bien sûr).
Posté : 21 mai 2007, 20:38
par djtec
Pour le temps de génération de page j'utilise ce code
Au debut du fichier
<?
$starttime = 0;
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$starttime = $mtime;
?>
A la fin du fichier
<?
$mtime = microtime();
$mtime = explode(" ",$mtime);
$mtime = $mtime[1] + $mtime[0];
$endtime = $mtime;
$gentime = round(($endtime - $starttime), 4);
echo '<br /><div align="center">Page générée en : '. $gentime .'s</div>';
?>
Alors comment faire pour qu'il n'affiche que 3 ou 4 chiffres derière la virgule.
Posté : 21 mai 2007, 20:48
par titerm
Tu utilise round() sur un nombre qui te donne un temps de quelques microsecondes dont l'unité de base est la seconde...
Il faudrais multiplier par 1000 avant le round, pour avoir un une unité en microsecondes.
Posté : 21 mai 2007, 20:52
par Invité
Désolé mais je comprend ce que tu me dit
Les chiffres en trop se trouve pas derière mais devant je me suis trompé
Voici le résultat que j'obtiens
Et j'aimerais obtenir moins de chiffre car si on calcul le nombre de seconde qui est indiqué je crois qu'on trouvera comme résultat des heures et la page s'affiche en quelque seconde donc je pense qu'il y a un soucis dans le calcul
Posté : 21 mai 2007, 20:57
par titerm
En fait, il faudrai utiliser microtime(true). Ca t'éviterai d'avoir a faire des explode.
$start = microtime(true);
blablabla
$end = microtime(true);
$delta = $end - $start;
et ton $delta est en seconde.
Ensuite, suivant la durée de ce que tu mesure, il est intérressant de changer l'unité ou pas.
Si ton traitment est de l'ordre de la seconde, tu peux faire direct un round($delta,4) pour avoir un resultat en second avec 4 chiffres apres la virgule.
Si ton traitement est de l'ordre de la microseconde, faite un round($delta*1000,4) pour avoir un resultat en microseconde avec 4 chiffres apres la virgule.
Posté : 21 mai 2007, 21:51
par djtec
Merci titerm sa fonctionne niquel.
Maintenant il me reste que le nb requête éxécuté.
Voici le script que j'ai trouvé
$nbquery = 0;
function query($sql)
{
global $nbquery;
$nbquery++;
$var = mysql_query($sql)or die(mysql_error());
return $var;
}
echo 'Il y a eu '.$nbquery.' requête(s) SQL dans cette page !';
Le problème qui se pose c'est que toutes mes requêtes sql devrait avoir que query() hors que moi elles sont toutes en mysql_query() et si je remplace mes requête en query() plus rien ne fonctionne et j'ai des erreur partout donc comment je pourrais fair epour que cela fonctionne avec mysql_query()
Posté : 21 mai 2007, 22:44
par titerm
Dans ton cas, mysql_query() ne retrouve peut etre pas la connexion établie (c'est suprenant mais admetons). Il est possible de fournir l'identifiant de connexion plutot que de laisser mysql_query le retrouver.
$link = mysql_connect(blablabla);
mysql_query($sql, $link);
Donc, essai en ajoutant un param a ta fonction query($sql,$link)
Sinon, il faudrai nous en dire plus que 'j'ai des erreurs partout'.
Posté : 21 mai 2007, 22:50
par Hubert Roksor
Tu dois pouvoir créer le lien dans la fonction de requête avec un truc du genre
function query($sql)
{
global $queries;
static $link;
if (!isset($link))
{
// À remplacer selon besoin
$link = mysql_connect();
$queries = 0;
}
++$queries;
return mysql_query($sql, $link);
}
Posté : 22 mai 2007, 01:38
par djtec
Voici l'erreur que j'obtiens si je met query() à la place de mysql_query()
Code : Tout sélectionner
Fatal error: Call to undefined function: query() in /home.13/s/t/u/studiogr/www/demo/test/articles.php on line 131
J'ai essayé vos deux méthodes mais cela ne fonctionne pas et je vois pas ce qu'il faudrait que je modifie dans vos scripts
Posté : 22 mai 2007, 06:54
par Klomac
Hum... faut définir ta fonction avant de l'appeler, c'est tout....
Posté : 22 mai 2007, 18:35
par djtec
Donc je dois mettre ma fonction dans le header et non dans mon footer c'est ça
Posté : 22 mai 2007, 18:37
par Klomac
Cela va sans dire... mais ça va encore mieux en le disant

Posté : 22 mai 2007, 18:57
par djtec
Maintenat que c'est dans le header sa fonctionne je n'ai plus d'erreur mais par contre sa ne m'affiche pas le nombre de requêtre sql dans mon footer