Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  4 724
Syssler litt med PHP for tiden og sliter litt med en oppgave.

Jeg skal logge ip-adressen og referer-adressen til de som kommer inn på siden i et tekstdokument. Deretter skal jeg lage en enkel hit-counter for hver IP-adresse.

Jeg klarer å lagre informasjonen i et tekstdokument ved hjelp av koden under, men jeg vet ikke hvordan jeg skal få laget en teller til hver enkelt IP. Akkurat nå leker jeg meg med funksjonen fgetcsv() for å vise informasjonen, men tror jeg er på villspor. Er det noen som kan gi meg litt input?

Kode

<?php
//lek med filer
$fil = "logg.txt";
$ip = $_SERVER['REMOTE_ADDR'];
$teller = 0;

if (isset($_SERVER['HTTP_REFERER'])){//hvis http_referer er satt blir $info-variabelen satt til både ip og referer
$reff = $_SERVER['HTTP_REFERER']; 
$info = "$ip,$reff";
}
else { //hvis http_referer ikke er satt skrives kun ip og 0.
$info = "$ip,0"; 
}

$filref = fopen($fil, "a"); //append for å legge til info på slutten av logg.txt

fwrite($filref, $info."\r\n"); //skriver til en ny linje i logg.txt

fclose($filref);

$filref = fopen($fil, "r");

while($matrise = fgetcsv($filref)){ //printer ut IP
	echo "$matrise[0] <br />";
}

fclose($filref);
?>
Du må sjekke om IP-adressen allerede eksisterer i loggen.
Hvis dette er tilfellet øker du telleren med 1, hvis ikke lagrer du IP-adressen i loggen og setter antall besøk til 1.
Jeg ville heller benyttet en database til dette. Det er mulig å løse det du spør om rent teknisk, men praktisk er det ikke. Tenk deg at hver eneste hit på siden din skal loggføres. Etter hvert snakker vi flere hundre tusen, kanskje millioner oppføringer. Når du i tillegg skal analysere disse dataene for å telle unike hits, snakker vi masse ressurser. Det blir tidskrevende og siden din vil enkelt forklart laste langsomt. Se heller på løsninger med f. eks MySQL Database.
Sist endret av ma10as; 22. oktober 2011 kl. 14:02.
Jaso's Avatar
Trådstarter
Sitat av s1gh Vis innlegg
Du må sjekke om IP-adressen allerede eksisterer i loggen.
Hvis dette er tilfellet øker du telleren med 1, hvis ikke lagrer du IP-adressen i loggen og setter antall besøk til 1.
Vis hele sitatet...
Jeg skjønner, problemet mitt er å finne en syntaks jeg kan bruke mot en tekstfil. Jeg vet ikke helt hvordan jeg kan lese ut alle IPer fra loggen å lagre dette i en matrise som jeg kan sammenligne med.

Sitat av ma10as Vis innlegg
Jeg ville heller benyttet en database til dette. Det er mulig å løse det du spør om rent teknisk, men praktisk er det ikke. Tenk deg at hver eneste hit på siden din skal loggføres. Etter hvert snakker vi flere hundre tusen, kanskje millioner oppføringer. Når du i tillegg skal analysere disse dataene for å telle unike hits, snakker vi masse ressurser. Det blir tidskrevende og siden din vil enkelt forklart laste langsomt. Se heller på løsninger med f. eks MySQL Database.
Vis hele sitatet...
Skulle gjerne brukt MySQL til dette, men det er en del av en kursoppgave som krever at vi bruker en tekstfil for å lære mer om filbehandling.
Du kan se litt på dette oppsettet jeg skrev nå, for å skrive/lese fra fil

Kode

<?php
$fil = 'logg.txt';

/*
	Write to file
*/

$ip  = isset($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : false;
$ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';

if ( $ip ) {
	$data = $ip . ',' . $ref . "\n";
	file_put_contents($fil, $data, FILE_APPEND);
}

/*
	Read from file
*/

$content = file_get_contents($fil);
$lines   = explode("\n", $content);

echo 'Antall hits: ' . count($lines);

foreach ( $lines as $line ) {
	$data = explode(',', $line);
	/*
		IP = $data[0]
		REF = $data[1]
	*/	
}
?>