04. januar 2013 - 23:50Der er
19 kommentarer og 1 løsning
Byg en besøgstæller fra bunden af...
Hej...
Sidder og ville gerne bygge en besøgstæller til min hjemmeside. Nogen der kan stille op, hvad der er at tage hensyn til, og hvordan man evt. brygger sådan en sammen?
Havde en ide om at man kommer til forsiden(index.php) først, der tælles, Det ville også være fint, hvis man på en måde kunne få en ide om, hvilken af ens sider der er mest besøgt osv..
Teknologi, AI og forretning er i centrum på Computerworlds Cloud og AI Festival i København d. 18. og 19. september. Se hele programmet for den store konference om strategisk brug af Cloud og AI på: www.cloud-festival.dk
Du skal nok ikke i første omgang tænke så meget på, hvilke sider du skal tjekke først. Hvis du måler på alle dine sider, kan du senere trække alle mulige rapporter ud på kryds og tværs af dine data.
Hvis dine data skal blive interessante, skal du nok tælle alle sidevisninger med timestamp og IP - og evt. info om klient properties, referer, URL med søgestreng, etc - og indsætte dem i en database.
Du bør sørge for, at kikke på besøgendes 'USER_AGENT' og holde den op mod en liste af kendte botter, så du kun tæller 'ægte' besøgende. Der findes lister 'derude', men sørg for at vælge en, der stadig og hele tiden holdes opdateret.
En anden approach til at frafiltrere botter bygger på, at en bot, der overholder reglerne, som det første læser sitets 'robots.txt'.
Prøver en klient at tilgå robots.txt, sørger en .htaccess for at klienten får serveret et PHP-dokument. Dette PHP-dokument logger klientens IP og USER_AGENT - og derefter udskriver teksten, som ellers ville stå i robots.txt. Denne IP/USER_AGENT kombination skal der efterfølgende ikke logges sidevisninger for.
Under alle omstændigheder vil der være bots, som ikke står på nogen af listerne, og som heller ikke læser robots.txt. Du kan dog filtrere de fleste fra, og den slags står for utrolig meget traffik.
Logning af sidevisninger kan hurtigt komme til at fylde enormt på et populært site, så du bør overveje en eller anden form for backup/caching med passende mellemrum.
Endelig kan du jo bruge en af de mange løsninger, som allerede er tilgængelige. Det er i det hele taget meget lettere =)
#2: Der er mange udbydere, som ikke tilbyder adgang til logfiler, men kun en mere eller mindre mangelfuld statistik. Måske er det derfor, spørger gerne 'vil selv' (og så for at lære).
Som jeg antydede i mit første indlæg, er jeg dog helt sikker på, jeg selv ville bruge GA =)
Tak for jeres indlæg.. Som ole nævner i #3, er det netop for at lære jeg vil selv.. men jeg er ikke en ørn til dette php endnu, håber engang at blive det. Ole jeg har læst dit indlæg i #1 og jeg syntes det for en begynder der ikke helt ved, hvor man starter for at bygge sådan en tæller, der syntes jeg det virker lidt avanceret.. men du har ganske ret.. Jeg vil jo gerne lære, og helst "Big time".. har som regel styr på det jeg får fat i.. men så er det jo lige med at vide hvor man starter for at vide, hvad man skal have fat..
Skal nok læse dit indlæg et par gange for at for stå USER_AGENT/Timestamp osv.. og IP kendes :-)
#2 nå.. jamen... så er det jo "bare" lige at få smækket denne DB sammen.
CREATE TABLE views ( id INT NOT NULL, page VARCHAR(100) NOT NULL, counter INT NOT NULL );
Men hvad gør man så?? Havde jo en ide om at man tog og startede sin side med en session_start() for derefter at smide en "Side_Sti" ind i en $_SESSION via PHP_SELF og så talte en counter op, skrev denne counter til en fil eller som i er inde på her til en DB.
Det var lidt denne ide jeg havde om begyndelsen til en "Skrabet" tæller... den holder måske ikke vand??
CREATE TABLE views ( page VARCHAR(100) NOT NULL, counter INT NOT NULL, PRIMARY KEY(page) );
#8: Det lyder godt og forståeligt :-) Jamen, det må vel så være at sætte page = argumentet i kaldet af funktionen.. og tæller counter op + sætte den ind under counter tabellen??
'Concurrency' i den betydning, Arne omtaler, handler om 'samtidighed mellem begivenheder'.
Hvis ingen har set siden endnu, og vi to begge går ind på siden præcis samtidigt, så er der umiddelbart et (akademisk) problem med resultatet, vi får vist.
Vi burde begge få vist 'To personer har nu set siden' - men systemet har ikke haft tid til at registrere mit besøg, og du får derfor beskeden: 'En person har set siden'. Jeg får af samme årsag samme besked.
I denne sammenhæng er det et meget lille og ubetydeligt problem. I andre betyder det rigtig meget =)
Langt vigtigere er det at beslutte, hvad det egentlig er, du vil tælle. Vil du bare tælle sidevisninger (herunder reloads), eller vil du vise unikke visninger (én visning pr. side pr. dag pr. bruger)? Ønsker du at vise sidevisninger til brugere - eller også til søgerobotter (der kan være voldsom forskel på de to tal)?
Ligenu tæller du kritikløst alt sammen til ét tal - og du har ikke data til at sortere/diskriminere ved visningen
#18: jamen, hvad så hvis vi går ind samtidigt og hver især får vist "En person har set siden" , men en tredie bruger hopper på 10. sek senere.. får han så at vide at han er den tredie besøgende, selvom den ikke har talt vores samtidige besøg som 2..??.
Jamen.. Det jeg egentligt vil.. er at lave det så perfekt som muligt med så mange data som muligt, men da jeg stadig betragter mig selv som ny- lærende i faget, må jeg jo starte med at "kravle før jeg kan gå" . Men jow.. Det ville da være rart at ende ud med : - antal daglige besøg - antal visninger af de forskellige sider. - samlet årlige besøg. - Samlet antal besøg(siden oprettelsen).
Men det skal også siges at tager man min webadresse.. Er det som bruger jo egentligt (index.php/html) man kommer til, der havde jeg så lidt tænkt mig, at er jeg nu f.eks kommet til (index.php/html) skulle det gerne tælle som et besøg, men skifter jeg så frem og tilbage mellem siderne, f.eks til gæstebog.php skal mit besøg selvfølgelig tælles op på gæstebogs siden, men skifter jeg så tilbage til forsiden(index.php) altså den egentlige webadresse skal jeg jo så selvfølgelig ikke tælles igen før jeg har forladt webadressen og så vender tilbage..
Og jow jeg vil også gerne med tiden tage hensyn til botterne, så det kan godt være det ikke er det sidste i ser til mig mht. til spørgsmål om denne tæller, men er som sagt lige startet igen med webinteressen efter en kort pause, og også i det hele taget.
Efter min bedste overbevisning er en counter paa en web side ikke saa vigtig som saldi paa en bank konto.
Men hvis du vil sikre dig mod concurrency problemer vaelger du en af:
A) brug InnoDB tabeller, brug transactions og brug transaction isolation level repeatable read
B) brug InnoDB tabeller, brug SELECT ... FOR UPDATE
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.