Temps de génération de page et nb de requête sql éffectué

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Temps de génération de page et nb de requête sql éffectué

par djtec » 22 mai 2007, 18:57

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

par Klomac » 22 mai 2007, 18:37

Cela va sans dire... mais ça va encore mieux en le disant ;)

par djtec » 22 mai 2007, 18:35

Donc je dois mettre ma fonction dans le header et non dans mon footer c'est ça

par Klomac » 22 mai 2007, 06:54

Hum... faut définir ta fonction avant de l'appeler, c'est tout....

par djtec » 22 mai 2007, 01:38

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

par Hubert Roksor » 21 mai 2007, 22:50

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); 
} 

par titerm » 21 mai 2007, 22:44

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'.

par djtec » 21 mai 2007, 21:51

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()

par titerm » 21 mai 2007, 20:57

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.

par Invité » 21 mai 2007, 20:52

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

Code : Tout sélectionner

Page générée en : 1179773012.9598 secondes
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

par titerm » 21 mai 2007, 20:48

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.

par djtec » 21 mai 2007, 20:38

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.

par Klomac » 21 mai 2007, 19:50

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).

par Hubert Roksor » 21 mai 2007, 19:48

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.

Temps de génération de page et nb de requête sql éffectué

par djtec » 21 mai 2007, 19:31

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...