COMPTEUR DE VISITES (AVEC FCHIER), TRÈS SIMPLE D'UTILISATION
Utilisateur anonyme
-
28 févr. 2006 à 17:55
Gulius
Messages postés19Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention10 mars 2006
-
10 mars 2006 à 20:51
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
Gulius
Messages postés19Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention10 mars 2006 10 mars 2006 à 20:51
Bas euh REFRESH_S représente le nombre de seconde avant le quel une IP est comptée comme valide (pas defaut je l'ai réglée à 4h).
Et si une IP a dépassé ce délai, elle est néttoyée ... heureusement .... ;-)
Pour ce qui est des commentaires, j'ai décidé d'en mettre beaucoup, pour éclairer le maximum l'utilisateur ... donc forcément, ça peut géner pour la lecture.
Menfin, merci pour ton commentaire
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 10 mars 2006 à 20:27
varchar{15) = 15 octets
ipV4 = 4 octets
ipV6 = 6 octets
int = 4 octets
je crois qu'on peut aussi trouver un type d'int sur deux octets, donc, personellement, j'aurais un int long et un short pour ipv6...
cs_jean84
Messages postés449Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention 5 mars 2009 10 mars 2006 à 13:32
Au fait je continue dans ma lance apres avoir lu le code... Je veux pas en rajouter mais c'est vrai que la mise en page des commentaires fait peur... (heureusement que dreamweaver met tout en orange, sinon sa doit etre cosmique pour lire...). Bon c'etait tout pour la partie critique (il en faut bien une ;-)) Sinon au niveau du code, le moins que l'on puisse dire, c'est que tu as des bonnes idees. C'est relativement bien fait (a part de trois trucs mais rien d'important) par contre il y a une fonction que je ne comprend pas, si tu pouvais m'eclairer...
- define("REFRESH_S", 4*60*60);
REFRESH_S => est-ce une constante deja defini ou tu l'a cree ?? cela represente quoi ??
Ensuite, j'ai decouvert en lisant ton source la fonction exlpode() que tu as utilise et je trouve son utilisation dans ta fonction tres bien vu.
Par contre au niveau de ton fichier, si j'ai ien compris, tu stoques un timestanp et une ip dedans a chaque ligne commencant par un #. Il serait judicieux de prevoir une fonction de "nettoyage" car a la longue, le fichier peut devenir consequent (c'est sur que tu as de la marge mais c'est bien d'y penser quand meme)
Je te met un 7/10 car c'est bien fait mais pas parfait (surtout les commentaires) et te souhaite de continuer sur cette voie !!
@++ tout le monde !
cs_jean84
Messages postés449Date d'inscriptionjeudi 26 août 2004StatutMembreDernière intervention 5 mars 2009 10 mars 2006 à 12:52
Salut a tous !
Je lisais vos commentaire sur le stockage d'une ip v4 dans une bdd et je me pose une petite question... Pourquoi mettre une ip dans un int ?? Moi perso j'ai toujours stocke dans un varchar{15) et je n'ai jamais eu de probleme... est-ce que c'est mal ??
En vous remerciant,
@++ et bon coding !
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 10 mars 2006 à 00:55
J'ai oublié de mettre quelques ff pour que ca soit vailde :)
Mais l'idée est la.. c'est 128 bits...
Et même si IPv6 devient plus populaire, il y a encore le cas ou c'est du IPv4 en IPv6
::xxx.xxx.xxx.xxx
Donc personnellement, pour mes applications je vais stoquer en string...
Il se pourrait très bien qu'un type de 128 bits sortent mais bon... je ne sais pas, on est pas rendu là... donc string power
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 9 mars 2006 à 21:06
oui, mais existe t'il un type d'int capable de transporter une adresse ip de ce type ? Il en existera surement un quand ipv6 sera plus utilisé.... ce qui me pousse à attendre les solutions à vennir...
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 8 mars 2006 à 23:05
Ouin, je pense que c'est un peu inutile mais bon... en2k
Pour ce qui est de $_SERVER['REMOTE_ADDR']. Cette variable est rempli automatiquement par le l'API du serveur (apache, IIS...) donc, il faut se documenter sur ces serveurs pour savoir la valeur retournée.
Mais elle devrait être sous la notation standard "ffff:ffff:ffff:ffff:ffff:ffff"
Gulius
Messages postés19Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention10 mars 2006 3 mars 2006 à 14:15
:) Effectivement j'ai conscience que mes ajouts de commentaires sont peut-être trop nombreux, et un peu foutus n'importe comment .... menfin, j'vais voir ça ...
Et pour les zéros, tes deux méthodes marchent niquel, mais elles affichent toutes deux :
0000023 au lieu de 0 000 023. C'est pôôô pareil. A moins que je me trompe ...
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 3 mars 2006 à 02:34
Cool pour les corrections..
Par contre, quand tu fais des blocs de commentaire /* */, essaie de ne pas les mettre sur plusieurs colonnes différentes... comme par exemple
$nbr_elem_file = count($file); /* On enregistre le nombre d'éléments de $file, car ce nombre va certainement changer au cours
du script, et si ou utilisait directement count($file), les résultats seraient tout simplement éronnés */
C'est vraiment dur à suivre le code dans ce temps la...
sérieusement, pour le nombre de zéro je persiste à dire que mes 2 méthodes montrées plus haut sont mieux.
Le commentaire
/* Attention: Si vous créer votre fichier texte vous même, et que vous y écrivez n'importe quoi, la valeur retournée
par la fonction serait probablement érronée !!! */
est à mon avis inutile... Si j'écris un fichier .dat avec des données complètement bizarres dedans... si l'utilisateur s'en va le modifier à la main, c'est sur à 100% que ca va donner n'importe quoi... PAR CONTRE, ton script devrait être prévu normalement pour ne pas que ca plante. (De plus, tite erreur de français : Si vous créez)
évidement prend 2 m
Pour ipv6, j'ai contacté la doc pour voir ce qu'on peut faire.
Gulius
Messages postés19Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention10 mars 2006 2 mars 2006 à 17:48
C'est bon, j'ai effectué les changements en rapport avce tes remarques GRenard.
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 2 mars 2006 à 17:01
http://fr.php.net/manual/fr/reserved.variables.php =>"'REMOTE_ADDR'
L'adresse IP du client qui demande la page courante."
je ne vois aucun détails sur ipv6... je n'ai pas lu tout les exemples, mais j'ai effectué une recherche sur ipv6 dans cette page, et aucune réponse...
Conslusion, en france, avoir un réseau ipv6, c'est pas quelquechose de facile, et la doc de php ne nous aide pas à la migration... bien qu'elle fasse parti des documentations en lignes les plus complètes et les mieux faites et illustrés... (avec la doc de perl...) Bref, mieux vaut attendre avant de penser vraiment à ipv6 (attendre que les langages qu'on utilise ai pensé aux solutions à notre place, l'esprit de php, c'est aussi ça...)
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 2 mars 2006 à 14:41
Que retourne exactement $_SERVER['REMOTE_ADDR'] en cas de IPv6 ?
(En passant, vous avez vu que maintenant c'est le moteur de Yahoo qui fait rechercher sur tout le site web de PHP :P)
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 2 mars 2006 à 11:25
en ipv4, on ne peut mettre que 255 ^4 ordinateurs sur une même plage, ça ne suffira pas dans les 10 ans à suivre, je suis d'accord avec toi...
tu stoques sur quoi une ip toi ? personellement, pour optimiser, je les mets sur des int, et un int ne peut pas contennir une ipv6...
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 1 mars 2006 à 23:10
IPv6 est déjà disponible... mais pas en grande quantité ou on en a pas besoin puisqu'on en a assez d'IP en IPv4.
Des places comme en Asie, il y a un bon paquet IPv6
De plus, pour les personnes en Europe et en Amérique, ils voient que le IPv4 fonctionne bien alors ca ne sert à rien pour eux de faire des routeurs IPv6...
coucou747
Messages postés12303Date d'inscriptionmardi 10 février 2004StatutMembreDernière intervention30 juillet 201244 1 mars 2006 à 20:18
avec IPv6... On ne pourrait plus stoquer une ip sur un octet, imagine : tout les drivers de cartes réseau seraient à reprogrammer, tout les os aussi, tout les outils C de paramétrage réseau, si tu stoque ton ip dans une base SQL, tu ne pourras plus mettre de type INT, tu devras mettre un INT LONG UNSIGNED, et un INT MEDIUM UNSIGNED...
Bref, personellement, je pense qu'ipv6 n'arrivera pas tout de suite, et qu'on a le temps de le voir vennir, je penses aussi que comme en C, on va voir apparaitre dans mysql et php et les autres outils, un type d'entier extra long... en C, on peut en mettre un sur 96 bits, je crois... c'est pas suffisant pour de la crypto, mais c'est déja pas mal, et largement pour une ip...
Gulius
Messages postés19Date d'inscriptionmardi 25 novembre 2003StatutMembreDernière intervention10 mars 2006 1 mars 2006 à 16:32
Evangun -> il compte les Ip unique (les visites uniques quoi).
GRenard -> j'avais jamais eu de commentaire aussi constructif. Merci bien. Je vais voir tous ce que tu m'as dit et surement changer ça (menfin si j'ai le temps ... :) Menfin merci bcp, faudrai plus de commentaire comme ça.
cs_GRenard
Messages postés1662Date d'inscriptionlundi 16 septembre 2002StatutMembreDernière intervention30 juillet 20081 28 févr. 2006 à 20:45
Evangun, ouvre la avec wordpad
Commentaire :
Mixer les commentaire /* et # n'est pas une bonne pratique
Une belle fonction retourne toujours un seul type ou FALSE... Tu vas me dire que c'est le cas... Mais une fonction aussi ne fait que ce qu'elle doit faire...
Donc à ta place, je ne retournerais pas une erreur mais plutôt un code (FALSE ou -1)
Ensuite, il est inutile de mettre $message_before et $message_after.
if $zero?"00000" ... mmm tu veux padder avec des zéros ? ok cette fonction peut le faire mais utilise str_pad ou sprintf('%0'.$zero.'d', $compteur); (même chose pour plus bas dans ton fichier)
Drôle de séparateur, premièrement un \n et deuxièmement un :... ok tu as le droits... mais si IPv6 on sait pas ce qui pourrait se passer avec un :... change de marqueur...
Le best dans une fonction est d'être générique... si tu ne mettais pas ton fwrite et ton return tout en haut là pour la création de ton fichier, je suis certain que ça marcherait quand même... bon ok, peut être que ça ferait quelques choses en plus mais bon...
Quelques fautes de français mais ce n'est pas grave... ce n'est pas ça l'exercice...
J'espère que mon commentaire t'aidera et aidera les autres.
Salut,
chez moi ton fichier php n'est pas indenté, c'est illisible.
Et est-ce que tu pourrais détailler ce que ton compteur... compte?
Sessions, visites, IP uniques, clicks...?
10 mars 2006 à 20:51
Et si une IP a dépassé ce délai, elle est néttoyée ... heureusement .... ;-)
Pour ce qui est des commentaires, j'ai décidé d'en mettre beaucoup, pour éclairer le maximum l'utilisateur ... donc forcément, ça peut géner pour la lecture.
Menfin, merci pour ton commentaire
10 mars 2006 à 20:27
ipV4 = 4 octets
ipV6 = 6 octets
int = 4 octets
je crois qu'on peut aussi trouver un type d'int sur deux octets, donc, personellement, j'aurais un int long et un short pour ipv6...
10 mars 2006 à 13:32
- define("REFRESH_S", 4*60*60);
REFRESH_S => est-ce une constante deja defini ou tu l'a cree ?? cela represente quoi ??
Ensuite, j'ai decouvert en lisant ton source la fonction exlpode() que tu as utilise et je trouve son utilisation dans ta fonction tres bien vu.
Par contre au niveau de ton fichier, si j'ai ien compris, tu stoques un timestanp et une ip dedans a chaque ligne commencant par un #. Il serait judicieux de prevoir une fonction de "nettoyage" car a la longue, le fichier peut devenir consequent (c'est sur que tu as de la marge mais c'est bien d'y penser quand meme)
Je te met un 7/10 car c'est bien fait mais pas parfait (surtout les commentaires) et te souhaite de continuer sur cette voie !!
@++ tout le monde !
10 mars 2006 à 12:52
Je lisais vos commentaire sur le stockage d'une ip v4 dans une bdd et je me pose une petite question... Pourquoi mettre une ip dans un int ?? Moi perso j'ai toujours stocke dans un varchar{15) et je n'ai jamais eu de probleme... est-ce que c'est mal ??
En vous remerciant,
@++ et bon coding !
10 mars 2006 à 00:55
Mais l'idée est la.. c'est 128 bits...
Et même si IPv6 devient plus populaire, il y a encore le cas ou c'est du IPv4 en IPv6
::xxx.xxx.xxx.xxx
Donc personnellement, pour mes applications je vais stoquer en string...
Il se pourrait très bien qu'un type de 128 bits sortent mais bon... je ne sais pas, on est pas rendu là... donc string power
9 mars 2006 à 21:06
8 mars 2006 à 23:05
Pour ce qui est de $_SERVER['REMOTE_ADDR']. Cette variable est rempli automatiquement par le l'API du serveur (apache, IIS...) donc, il faut se documenter sur ces serveurs pour savoir la valeur retournée.
Mais elle devrait être sous la notation standard "ffff:ffff:ffff:ffff:ffff:ffff"
3 mars 2006 à 14:15
Et pour les zéros, tes deux méthodes marchent niquel, mais elles affichent toutes deux :
0000023 au lieu de 0 000 023. C'est pôôô pareil. A moins que je me trompe ...
3 mars 2006 à 02:34
Par contre, quand tu fais des blocs de commentaire /* */, essaie de ne pas les mettre sur plusieurs colonnes différentes... comme par exemple
$nbr_elem_file = count($file); /* On enregistre le nombre d'éléments de $file, car ce nombre va certainement changer au cours
du script, et si ou utilisait directement count($file), les résultats seraient tout simplement éronnés */
C'est vraiment dur à suivre le code dans ce temps la...
sérieusement, pour le nombre de zéro je persiste à dire que mes 2 méthodes montrées plus haut sont mieux.
Le commentaire
/* Attention: Si vous créer votre fichier texte vous même, et que vous y écrivez n'importe quoi, la valeur retournée
par la fonction serait probablement érronée !!! */
est à mon avis inutile... Si j'écris un fichier .dat avec des données complètement bizarres dedans... si l'utilisateur s'en va le modifier à la main, c'est sur à 100% que ca va donner n'importe quoi... PAR CONTRE, ton script devrait être prévu normalement pour ne pas que ca plante. (De plus, tite erreur de français : Si vous créez)
évidement prend 2 m
Pour ipv6, j'ai contacté la doc pour voir ce qu'on peut faire.
2 mars 2006 à 17:48
2 mars 2006 à 17:01
=>"'REMOTE_ADDR'
L'adresse IP du client qui demande la page courante."
je ne vois aucun détails sur ipv6... je n'ai pas lu tout les exemples, mais j'ai effectué une recherche sur ipv6 dans cette page, et aucune réponse...
Conslusion, en france, avoir un réseau ipv6, c'est pas quelquechose de facile, et la doc de php ne nous aide pas à la migration... bien qu'elle fasse parti des documentations en lignes les plus complètes et les mieux faites et illustrés... (avec la doc de perl...) Bref, mieux vaut attendre avant de penser vraiment à ipv6 (attendre que les langages qu'on utilise ai pensé aux solutions à notre place, l'esprit de php, c'est aussi ça...)
2 mars 2006 à 14:41
(En passant, vous avez vu que maintenant c'est le moteur de Yahoo qui fait rechercher sur tout le site web de PHP :P)
2 mars 2006 à 11:25
tu stoques sur quoi une ip toi ? personellement, pour optimiser, je les mets sur des int, et un int ne peut pas contennir une ipv6...
1 mars 2006 à 23:10
Des places comme en Asie, il y a un bon paquet IPv6
De plus, pour les personnes en Europe et en Amérique, ils voient que le IPv4 fonctionne bien alors ca ne sert à rien pour eux de faire des routeurs IPv6...
1 mars 2006 à 20:18
Bref, personellement, je pense qu'ipv6 n'arrivera pas tout de suite, et qu'on a le temps de le voir vennir, je penses aussi que comme en C, on va voir apparaitre dans mysql et php et les autres outils, un type d'entier extra long... en C, on peut en mettre un sur 96 bits, je crois... c'est pas suffisant pour de la crypto, mais c'est déja pas mal, et largement pour une ip...
1 mars 2006 à 16:32
GRenard -> j'avais jamais eu de commentaire aussi constructif. Merci bien. Je vais voir tous ce que tu m'as dit et surement changer ça (menfin si j'ai le temps ... :) Menfin merci bcp, faudrai plus de commentaire comme ça.
28 févr. 2006 à 20:45
Commentaire :
Mixer les commentaire /* et # n'est pas une bonne pratique
Une belle fonction retourne toujours un seul type ou FALSE... Tu vas me dire que c'est le cas... Mais une fonction aussi ne fait que ce qu'elle doit faire...
Donc à ta place, je ne retournerais pas une erreur mais plutôt un code (FALSE ou -1)
Ensuite, il est inutile de mettre $message_before et $message_after.
if $zero?"00000" ... mmm tu veux padder avec des zéros ? ok cette fonction peut le faire mais utilise str_pad ou sprintf('%0'.$zero.'d', $compteur); (même chose pour plus bas dans ton fichier)
Drôle de séparateur, premièrement un \n et deuxièmement un :... ok tu as le droits... mais si IPv6 on sait pas ce qui pourrait se passer avec un :... change de marqueur...
Le best dans une fonction est d'être générique... si tu ne mettais pas ton fwrite et ton return tout en haut là pour la création de ton fichier, je suis certain que ça marcherait quand même... bon ok, peut être que ça ferait quelques choses en plus mais bon...
Quelques fautes de français mais ce n'est pas grave... ce n'est pas ça l'exercice...
J'espère que mon commentaire t'aidera et aidera les autres.
28 févr. 2006 à 17:55
chez moi ton fichier php n'est pas indenté, c'est illisible.
Et est-ce que tu pourrais détailler ce que ton compteur... compte?
Sessions, visites, IP uniques, clicks...?