COMPTEUR JOURNAL DES VISITEURS AVEC LEUR IP ET LA DATE ET HEURE DE LEUR VISITE
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 2009
-
12 nov. 2006 à 13:10
amin_2005
Messages postés4Date d'inscriptiondimanche 15 mai 2005StatutMembreDernière intervention 9 mai 2007
-
9 mai 2007 à 10:07
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
amin_2005
Messages postés4Date d'inscriptiondimanche 15 mai 2005StatutMembreDernière intervention 9 mai 2007 9 mai 2007 à 10:07
merci
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 18 nov. 2006 à 15:20
tout dépend du context en fait...
Si tu fais un déja select autant utiliser mysql_num_rows ce qui t'évitera de faire une requete en plus à mysql... .. .
Si tu ne fais pas de select au préalable et que tu veux juste récupérer le nombre d'entrée SELECT COUNT(champ)... s'impose... .. .
@ tchaOo°
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 18 nov. 2006 à 12:08
oué ok, alors à ce moment je tiens à m'excuser, quand j'ai di select *, c'était pour aller plus vite, mais c'est vrai que finalement c'était pas plus intelligent d'essayer d'aller vite ... :p mais dans l'idée je pensais bien à lister les valeurs nécéssaires à prendre et pas un select *...
voila :)
Ensuite :
>> >>Ensuite un mysql_num_rows et tu connais le nombre de visiteurs depuis le début
>>Tu peux aussi faire un SELECT COUNT(champ) AS nombre FROM table WHERE condition
C'est quoi le mieux ?
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 17 nov. 2006 à 15:02
"si tu pourrais m'expliquer d'avantage car là je seche un peu sur ta reflexion"
Faire une "SELECT champ1, champ2, champ3" plutot qu'un "SELECT *" a 3 avantage pour un inconvénient... .. .
Avantages :
- Une maintenance du code plus clair car tu sais quels champs sont demandés...
- un traitement par mysql plus rapide car elle sait quels champs renvoyer et n'a donc pas besoin de faire au préalable une recherche sur la structure de la table...
- un gain de mémoire car les informations traitées par la suite avec php sont juste celles dont tu as besoin...
Inconvénient :
- si tu change la structure de ta table tu dois modifier tes requetes...
@ tchaOo°
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 17 nov. 2006 à 13:58
il veux dire un "select champ1, champ2, champ3" plutot qu'un "select *" expéditif
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 17 nov. 2006 à 13:36
comment ca on liste les champs ?
pour lister les champs dans mysql il faut bien que tu les choisissent non ?
donc un select ?
Select * From table
si tu pourrais m'expliquer d'avantage car là je seche un peu sur ta reflexion
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 17 nov. 2006 à 12:22
>> tu conserve tout, et en meme temps t'a juste a faire un select *,
On ne fait pas se SELECT * mais on liste les champs. C'est plus propre, plus optimisé et surtout plus clair pour la maintenance du code.
>> Ensuite un mysql_num_rows et tu connais le nombre de visiteurs depuis le début
Tu peux aussi faire un SELECT COUNT(champ) AS nombre FROM table WHERE condition
++
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 17 nov. 2006 à 12:14
5/ Apparemment le mail risque d'avoir plusieurs fois. Si on 200 visiteurs "uniques" ( = 200 IP différentes) accèdent le 30 ou 31 du mois courant. Ils vont lancer au total 200 email de rapport. Ce n'est pas fiable de faire comme ça. Il vaut mieux passer par un autre script qui est appellé tous les 30 ou 31 du mois par un cron.
--> et inversement si personne ne se connecte le 30 ... :p
Pourquoi pas utiliser une base de donnée ?
comme ca à la fin du mois, le script d'envoi d'email ne prends que les valeurs donnée dans par la base de donnée sur la période actuelle (le mois par ex), du coup, tu conserve tout, et en meme temps t'a juste a faire un select *, ensuite un mysql_num_rows et tu connais le nombre de visiteurs depuis le début, ou tu fait un where date > "quand tu veux" et tu peux savoir combien t'a eu de visiteurs depuis un jour, une semaine, un mois, un an, etc, c'est vraiment plus flexible.
Autre probleme, si t'a 200 visiteurs par jours, quand t'envera ton fichier, t'aura un petit probleme de taille ... :p
Apres pour l'histoire de reconnaitre un visiteur unique j'ai pas trop d'idée sur quelle est la meilleur solution ... si yen a un qui en a une bonne :p
keyloger666
Messages postés9Date d'inscriptionmardi 18 juillet 2006StatutMembreDernière intervention16 novembre 2006 16 nov. 2006 à 20:30
ben si deux personne se connecte avec la meme ip a cause d'un proxy ( ce qui n'arive pas souvent) elle sera enregistré quand meme
kankrelune
Messages postés1293Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention21 mai 2015 13 nov. 2006 à 18:06
A noter aussi qu'il ne faut pas se baser uniquement sur $_SERVER['REMOTE_ADDR'] pour récupérer l'ip de l'internaute sinon les résultats seront faussés... s'il y a 10 internautes derrière le même proxy ils seront contés comme une seule et même connection... .. .
@ tchaOo°
JulioDelphi
Messages postés2226Date d'inscriptiondimanche 5 octobre 2003StatutMembreDernière intervention18 novembre 201014 13 nov. 2006 à 13:30
ça entre tout en double, non ??
et si j'ai : fopen("ip.txt", "a");
pourquoi j'ai ensuite : $path = 'chemin/ip.txt';
le chemin a changé tout seul :O
et puis ya ";;" a la fin de fopen("ip.txt", "a");; au lieu d'un seul
a bientot
webdeb
Messages postés488Date d'inscriptionsamedi 5 avril 2003StatutMembreDernière intervention31 mars 20094 12 nov. 2006 à 13:10
Salut !
Voici plusieurs remarques qui me semblent nécessaires pour optimiser ton script :
1/ Une adresse IP n'est pas du tout fiable pour reconnaître un visiteur. Un cookie serait préféré bien qu'il ne soit pas fiable également pour obtenir des stats correctes.
2/ Pour récupérer une adresse IP, ce n'est pas $REMOTE_ADDR mais $_SERVER['REMOTE_ADDR']
3/ Les chaînes statiques sont à mettre en apostrophes et non guillemets
4/ Pour le test d'égalité de fin de mois, utilise 3 égals plutôt que 2. Ca permet de vérifier le type de la variable au passage.
5/ Apparemment le mail risque d'avoir plusieurs fois. Si on 200 visiteurs "uniques" ( = 200 IP différentes) accèdent le 30 ou 31 du mois courant. Ils vont lancer au total 200 email de rapport. Ce n'est pas fiable de faire comme ça. Il vaut mieux passer par un autre script qui est appellé tous les 30 ou 31 du mois par un cron.
9 mai 2007 à 10:07
18 nov. 2006 à 15:20
Si tu fais un déja select autant utiliser mysql_num_rows ce qui t'évitera de faire une requete en plus à mysql... .. .
Si tu ne fais pas de select au préalable et que tu veux juste récupérer le nombre d'entrée SELECT COUNT(champ)... s'impose... .. .
@ tchaOo°
18 nov. 2006 à 12:08
voila :)
Ensuite :
>> >>Ensuite un mysql_num_rows et tu connais le nombre de visiteurs depuis le début
>>Tu peux aussi faire un SELECT COUNT(champ) AS nombre FROM table WHERE condition
C'est quoi le mieux ?
17 nov. 2006 à 15:02
Faire une "SELECT champ1, champ2, champ3" plutot qu'un "SELECT *" a 3 avantage pour un inconvénient... .. .
Avantages :
- Une maintenance du code plus clair car tu sais quels champs sont demandés...
- un traitement par mysql plus rapide car elle sait quels champs renvoyer et n'a donc pas besoin de faire au préalable une recherche sur la structure de la table...
- un gain de mémoire car les informations traitées par la suite avec php sont juste celles dont tu as besoin...
Inconvénient :
- si tu change la structure de ta table tu dois modifier tes requetes...
@ tchaOo°
17 nov. 2006 à 13:58
17 nov. 2006 à 13:36
pour lister les champs dans mysql il faut bien que tu les choisissent non ?
donc un select ?
Select * From table
si tu pourrais m'expliquer d'avantage car là je seche un peu sur ta reflexion
17 nov. 2006 à 12:22
On ne fait pas se SELECT * mais on liste les champs. C'est plus propre, plus optimisé et surtout plus clair pour la maintenance du code.
>> Ensuite un mysql_num_rows et tu connais le nombre de visiteurs depuis le début
Tu peux aussi faire un SELECT COUNT(champ) AS nombre FROM table WHERE condition
++
17 nov. 2006 à 12:14
--> et inversement si personne ne se connecte le 30 ... :p
Pourquoi pas utiliser une base de donnée ?
comme ca à la fin du mois, le script d'envoi d'email ne prends que les valeurs donnée dans par la base de donnée sur la période actuelle (le mois par ex), du coup, tu conserve tout, et en meme temps t'a juste a faire un select *, ensuite un mysql_num_rows et tu connais le nombre de visiteurs depuis le début, ou tu fait un where date > "quand tu veux" et tu peux savoir combien t'a eu de visiteurs depuis un jour, une semaine, un mois, un an, etc, c'est vraiment plus flexible.
Autre probleme, si t'a 200 visiteurs par jours, quand t'envera ton fichier, t'aura un petit probleme de taille ... :p
Apres pour l'histoire de reconnaitre un visiteur unique j'ai pas trop d'idée sur quelle est la meilleur solution ... si yen a un qui en a une bonne :p
16 nov. 2006 à 20:30
13 nov. 2006 à 18:06
@ tchaOo°
13 nov. 2006 à 13:30
pourquoi mettre 2 fois :
# $date = date("l-d-m-Y");
# $heure = date("H:i:s");
# $fp = fopen("ip.txt", "a");
# fputs ($fp, "{ $REMOTE_ADDR } the $date at $heure \n");
# fclose($fp);
ça entre tout en double, non ??
et si j'ai : fopen("ip.txt", "a");
pourquoi j'ai ensuite : $path = 'chemin/ip.txt';
le chemin a changé tout seul :O
et puis ya ";;" a la fin de fopen("ip.txt", "a");; au lieu d'un seul
a bientot
12 nov. 2006 à 13:10
Voici plusieurs remarques qui me semblent nécessaires pour optimiser ton script :
1/ Une adresse IP n'est pas du tout fiable pour reconnaître un visiteur. Un cookie serait préféré bien qu'il ne soit pas fiable également pour obtenir des stats correctes.
2/ Pour récupérer une adresse IP, ce n'est pas $REMOTE_ADDR mais $_SERVER['REMOTE_ADDR']
3/ Les chaînes statiques sont à mettre en apostrophes et non guillemets
4/ Pour le test d'égalité de fin de mois, utilise 3 égals plutôt que 2. Ca permet de vérifier le type de la variable au passage.
5/ Apparemment le mail risque d'avoir plusieurs fois. Si on 200 visiteurs "uniques" ( = 200 IP différentes) accèdent le 30 ou 31 du mois courant. Ils vont lancer au total 200 email de rapport. Ce n'est pas fiable de faire comme ça. Il vaut mieux passer par un autre script qui est appellé tous les 30 ou 31 du mois par un cron.
++