COMPTEUR DE VISITES (AVEC FCHIER), TRÈS SIMPLE D'UTILISATION

Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
- - Dernière réponse : Gulius
Messages postés
19
Date d'inscription
mardi 25 novembre 2003
Statut
Membre
Dernière intervention
10 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.

https://codes-sources.commentcamarche.net/source/36306-compteur-de-visites-avec-fchier-tres-simple-d-utilisation

Gulius
Messages postés
19
Date d'inscription
mardi 25 novembre 2003
Statut
Membre
Dernière intervention
10 mars 2006
-
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és
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30 -
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és
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009
-
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és
449
Date d'inscription
jeudi 26 août 2004
Statut
Membre
Dernière intervention
5 mars 2009
-
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és
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
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és
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30 -
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és
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
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és
19
Date d'inscription
mardi 25 novembre 2003
Statut
Membre
Dernière intervention
10 mars 2006
-
:) 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és
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
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és
19
Date d'inscription
mardi 25 novembre 2003
Statut
Membre
Dernière intervention
10 mars 2006
-
C'est bon, j'ai effectué les changements en rapport avce tes remarques GRenard.
coucou747
Messages postés
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30 -
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és
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
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és
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30 -
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és
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
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és
12303
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
30 -
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és
19
Date d'inscription
mardi 25 novembre 2003
Statut
Membre
Dernière intervention
10 mars 2006
-
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és
1662
Date d'inscription
lundi 16 septembre 2002
Statut
Membre
Dernière intervention
30 juillet 2008
1 -
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.
Evangun
Messages postés
1980
Date d'inscription
dimanche 20 février 2005
Statut
Membre
Dernière intervention
24 septembre 2012
5 -
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...?