Gå til innhold

Besøksteller som teller unike besøkende


Anbefalte innlegg

Skrevet (endret)

Hvordan lager jeg en counter til websiden min som teller antall besøkende ved å se hvor mange forskjellige ip-adresser som har vær på siden min?

Endret av ntec
Videoannonse
Annonse
Skrevet

kanskje noe slikt?

<?php
$ipadresser = file('ipadresser.txt');
if(!in_array($_SERVER['REMOTE_ADDR'], $ipadresser)) {
$AntBesokende = file_get_contents('teller.txt');
$AntBesokende++;
$counter = fopen('teller.txt','w');
fwrite($counter, $AntBesokende);
fclose($counter);
}
$filref = fopen('ipadresser.txt','w');
fwrite($filref, $_SERVER['REMOTE_ADDR']);
fwrite($filref, "\n");
fclose($filref);
include("teller.txt");
?>

noe sånt kanskje? har ikke prøvd koden

Skrevet (endret)

Jeg fikk telleren til å funke, se www.draglan.net/teller.php ...

 

men et problem, denne telleren teller ikke unike besøkende.. hvis jeg går inn 5 ganger til den siden (teller.php), så teller den 5 besøkende i stedet for en besøkende....

Endret av ntec
Skrevet

Her er en måte å gjøre det på:

<?php
$datafil = "data/dagens.txt"; 
 //første linje i denne fila er antallet besøkende
 //andre linje er datoen for siste innføring
$infofrafil=file($datafil); 
$antall=$infofrafil[0];
$dato=$infofrafil[1];
if($dato==date('Y-m-d')) {
 //øker antallet da det er samme dato
 //sett inn eventuell sjekk for unik id her
 $dagens = fopen($datafil,'w');
 $antall= $antall + 1; 
 fwrite($dagens, $antall."\n".$dato);
 fclose($dagens);
}
else {
//ny dag, setter antall til 1 og setter dato til i dag
 $dagens = fopen($datafil,'w');
 fwrite($dagens, "1"."\n".date('Y-m-d'));
 fclose($dagens);
}
?>

Skrevet
Som selvfølgelig må gnukkes sammen med en av de andre metodene om du skal ha unike treff :)

Jupp, men noe må han gjøre selv. :)

Nevnte det forresten i koden ovenfor også, dog med noe tvilsom plassering.

 

Her er en fungerende versjon av koden til Hockey500 for unike besøkende:

<?php
$datamappe = "data/";
$tellefil = "teller.txt";
$ipadressefil = "ipadresser.txt";
$ipadresser = file($datamappe.$ipadressefil); //array med IP-er
if(!in_array($_SERVER['REMOTE_ADDR']."\n", $ipadresser)) {
 echo "Du er en ny besøkende."; //debug
 echo "<br>"; //debug
 echo "Antall besøkende: "; //debug
 $AntBesokende = file_get_contents($datamappe.$tellefil);
 $AntBesokende++;
 $counter = fopen($datamappe.$tellefil,'w');
 fwrite($counter, $AntBesokende);
 fclose($counter);
 $lesipadressefil = fopen($datamappe.$ipadressefil, "w"); 
 fwrite($lesipadressefil, $_SERVER['REMOTE_ADDR']);
 fwrite($lesipadressefil, "\n");
 fclose($lesipadressefil);
}
else { //debug
 echo "Du har vært her før.";
 echo "<br>";
 echo "Antall besøkende: ";
}
include($datamappe.$tellefil); //debug
?>

Sleng så inn en sjekk for om datoen har skifta, så er du i mål Ntec.

Skrevet
Som selvfølgelig må gnukkes sammen med en av de andre metodene om du skal ha unike treff :)

Jupp, men noe må han gjøre selv. :)

Nevnte det forresten i koden ovenfor også, dog med noe tvilsom plassering.

 

Her er en fungerende versjon av koden til Hockey500 for unike besøkende:

<?php
$datamappe = "data/";
$tellefil = "teller.txt";
$ipadressefil = "ipadresser.txt";
$ipadresser = file($datamappe.$ipadressefil); //array med IP-er
if(!in_array($_SERVER['REMOTE_ADDR']."\n", $ipadresser)) {
 echo "Du er en ny besøkende."; //debug
 echo "<br>"; //debug
 echo "Antall besøkende: "; //debug
 $AntBesokende = file_get_contents($datamappe.$tellefil);
 $AntBesokende++;
 $counter = fopen($datamappe.$tellefil,'w');
 fwrite($counter, $AntBesokende);
 fclose($counter);
 $lesipadressefil = fopen($datamappe.$ipadressefil, "w"); 
 fwrite($lesipadressefil, $_SERVER['REMOTE_ADDR']);
 fwrite($lesipadressefil, "\n");
 fclose($lesipadressefil);
}
else { //debug
 echo "Du har vært her før.";
 echo "<br>";
 echo "Antall besøkende: ";
}
include($datamappe.$tellefil); //debug
?>

Sleng så inn en sjekk for om datoen har skifta, så er du i mål Ntec.

5000743[/snapback]

 

Flott, fikk den til å fungere! men kan du få den til å logge antall besøkende per dag? DA er jeg i mål ;)

Skrevet

Dersom siden din har litt størrelse så må jeg desverre si at du MÅ ABSOLUTT IKKE BRUKE scriptet ovenfor! Scriptet vil knele serveren.

 

Det som orsus sier er veldig viktig. Ikke bruk den funksjonen ovenfor for å sjekke hvis en bruker har vært der. Da må du i så fall slette filen hver dag eller noe lignende.

 

Hvis du velger å benytte en SQL løsning så vil ikke problemet være like stort. Da kan du indeksere feltet, og da er det en B-tree gruppering av dataene. Det vil si at SQL serveren vet ca. hvor den skal lete for å finne frem ip adressen hvis den finnes.

 

Glem ikke at de fleste seriøse hoster vil kaste deg ut av serveren dersom du bruker for mye ressurser!

Skrevet (endret)

<?php
//Laget av Zico
if(!is_file('counts.txt')){ die('count.txt fins ikke'); }

if(!is_writable('counts.txt')){ 
if(!@chmod('counts.txt', 0666)){ die('Kunne ikke automatisk chmodde count.txt. Gjør det manuelt'); }
}

if(!$fp = fopen('counts.txt', 'a')){ die('Kunne ikke åpne count.txt'); }
fwrite($fp, $_SERVER['REMOTE_ADDR'] . "\n");
fclose($fp);

if(!file('counts.txt')){ die('Kunne ikke åpne count.txt'); }

function hits($unique = FALSE){
if($unique == FALSE){ echo count(file('counts.txt')); }
else { echo count(array_unique(file('counts.txt'))); }
}

function ip(){
foreach( array_unique(file('counts.txt')) as $ip){ echo "$ip<br>\n"; }
}

?>
<p>hits: <? hits(); ?><br>
Unike treff: <? hits(TRUE); ?><br>
</p>
<p>
Unike Iper: <br>
<? ip(); ?>
</p>

 

Jeg vet ikke om denne her er noe mindre ressurskrevende, men den funker...

 

Må vel også nevnes at fila kan bli FRYKTLIG stor...

Endret av Zic0
Skrevet

neida, den fila blir ikke så stor! blir bare 146 kb / 10 000 besøkende...

 

men den telleren har heller ikke statistikk som viser ant besøkende den og den dagen

Skrevet

ntec, hvorfor kikker du ikke bare innom hotscripts.com?

Der finner du avanserte tellere, f.eks. phpmyvisites som viser alt om brukeren i tillegg. Du kan der se hvordan brukeren har funnet siden din, hvor mange sidevisninger, hvor mange unike hits, gjennomsnittlig besøkestid, landet de kommer fra - og så videre.

Skrevet
Vil du den skal tømmes hver dag også?

5005222[/snapback]

 

Nei, den skal notere ned hvor mange som var på siden dag for dag..

f.eks:

 

1.11: 42

2.11: 43

3.11: 32

4.11: 54

 

osv...... :p

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...