Counter med fwrite

Tags:    php

<< < 12 > >>
Hej alle.

Jeg leger lidt med at lave en counter i fwrite, men jeg kan sgu ikke få det til at virke :/

Vil gerne lave den sådan at den laver $hits i toppen, og når der kommer en ny ind på side, så bliver hans ip notetet så den ikke noter ham hvergang han opdater siden.

Altså, den gemmer ip-adressen så den kan gå ind og læse om personen har vært der før.

Her er min kode.

Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 15.04.2007 11:49 af Bruger #11184
1. Hvis personen der besøger siden kun skal registreres én gang i counteren, så skal du første finde hans IP i counter.txt og derefter bestemme om hans besøg skal skrives ind i counter.txt

2. En af grundene til at du ikke kan få den til at virke er at du bare henter indholdet ud af counter.txt uden at bearbejde det. Sådan som du henter data ud - og skriver det ind - kommer der bare til at stå en masse ip-adresser og ikke nogle "counter-tal"...

Et foreslag kan være, at du i stedet for at hente "$hits" med "file_get_contents" bruger funktionen "file". Derefter laver en count på hvor mange linier der er i counter.txt, minusser resultatet med 1 og du har ca. hvor mange hits der er i din counter.txt - Så slipper du for at skulle skrive tal ind i counter.txt.

Med hensyn til at bestemme om en ip skal skrives ind i counter.txt. Hvis du bruger det foreslag jeg har skrevet for oven, skal du lave et loop der kører alle linier igennem for at tjekke efter en lignende ip. Hvis den findes, skrives brugerens ip ikke ind, hvis den ikke findes skrives den ind.



rent sikkerhedsmæsigt ville jeg synes det er en dårlig ide at gemme IP adresser i en txt fil. Det ville være mere sikkert med en MySQL database og meget nemmere da der bl.a. findes en artikel her på Udv.dk omkring det ;)



Morten, han kan jo også vælge at gemme tekstfilen et sted som ikke kan ses fra browseren af.



Krille, jeg vil prøve de ting du har givet som forslag.

Men har et problem. Vil gerne have en guide i noget af det, så jeg forstår det 100% inden jeg begynder at fikse en kode sammen.

Nogle der ved hvor der er en ordentlig guide?



Morten, han kan jo også vælge at gemme tekstfilen et sted som ikke kan ses fra browseren af.


På et eller andet tidpunkt finder "hackerne" den nok ;)



Man kan vel lave en sti i den, som gør at den ikke kan læses igennem en browser og at man kun at se den ved at åbne ftp`en ??



du kunne jo bare kryptere informationer ;)



Løsningen med en liste over ip addresser er jo rent mord over for webserveren!!

listen bliver ALDRIG mindre, tværtimod er den kun ekspanderende, for at finde ud af hvor mange besøgende der har været, skal man parse hele filen igennem for newlines, det tager lineær tid. Herudover tager det også lineær ( O(n) ) tid at finde ud af om en besøgende har været der før!

eksempel: Forestil at du har haft 1.000.000 besøgende. Hvis ip-addressen gemmes som en serie af karakterer, giver det, et slag på tasken, 10 sammenligninger per addresse, i alt 10.000.000 sammenligninger. Et skøn herfra, så tager det hurtigt et sekund at køre igennem. Og med flere samtidige besøgende kan det godt blive træls.

Alternativt kunne du holde addresse listen sorteret, så ville det kun tage < 35 opslag, om du så har haft hele jordens befolkning på besøg!!, desværre bliver det både dyrt (i cpu tid) med indsættelse af nye besøgende, og en pest at kode. et binærttræ (google det) ville kunne afhjælpe maskinens problem, men det bliver ikke nemmere at kode af :(

Et andet problem er at, stortset alle har en dynamisk IP addresse, så nogen vil tælle flere gange, og nogen aldrig (dette opvejer måske hinanden)

mit forslag vil derfor være at benytte sessioner, og så benytte antallet af oprettede sessioner som et mål for hvor mange besøgende der har været. Denne løsning tager konstant tid :)

mvh
Troels



Troels,

Alle ip'er bliver jo i forvejen gemt af apache. Og på mange webhoteller har du adgang til ens log fil.

Jeg vil nok bruge en mysql database. Så kan du med en simpel SELECT query tjekke om ip'en har været der før.



ja, men du parser ikke loggen hver gang du skal generere en side, vel?

mvh
Troels



<< < 12 > >>
t