Gå til innhold

Problemer med teller script


Anbefalte innlegg

Hei. Jeg har laget et teller script som logger diverse info om besøkende.

Problemet er at jeg ønsker at scriptet skal vente en time med å legge

eksisterende ip-adresser til tekstfilen.

 

Når det er gått en time mellom første gang ip-adressen er registrert(lagret)

til neste gang samme ip-adressen besøker siden, så skal ip-adressen

legges til teksfilen som en ny linje/tilslag.

 

IP adresser som ikke fins i teksfilen skal lagres med en gang.

 

Håper jeg har gjort meg noen lunde forstått. Nedenfor er koden jeg har laget.

Håper noen kan hjelpe meg med dette:)

 

 

<?php 
# Defines variables 
$ip = $_SERVER['REMOTE_ADDR']; 
$browser = $_SERVER['HTTP_USER_AGENT']; 
$date = date('d.m.Y'); 
$time = date('H.i.s'); 

# Open file 
$file = file('hits.txt'); 

# Print out to screen 
foreach ($file as $line) { 
print "$line<br>"; 
} 

# Adds one step for each entry 
$count = count($file) + 1; 

# Exclude ip-addresses that already exists in the text file 
if(in_array($ip." :: ".$browser." :: ".$date." :: ".$time."\n",$file) and (time() + (3600))>$time) { 
# Do nothing 
} 
else { 
# Writes to file 
$write = fopen('hits.txt', 'a'); 
fwrite($write, $ip." :: ".$browser." :: ".$date." :: ".$time."\n"); 
fclose($write); 
} 
?>

Endret av christdi
Lenke til kommentar
Videoannonse
Annonse

Det er sikkert flere måter å løse dette på

 

en måte er å bruke sessions eller cookies for å registrere siste besøk. Dersom siste besøk er mer enn en time siden, så skrives det til fil, hvis ikke så gjøres det ingenting

 

En annen måte er å sjekke filen om ipadresse er der fra før. Er ikke det, skriv til fil. Er den det, sjekk om siste besøk er mer enn en time siden

 

$file = file("hits.txt");
$lines = count($file);
foreach($file as $line) {
   $data = explode (" :: ", $line);
   $saved_ip[] = $data[0];
   $saved_browser[] = $data[1];
   $saved_date[] = $data[2];
   $saved_time[] = $data[3];
}
$ip_rev = array_reverse($saved_ip, true); // Snur rekkefølgen på ipadressene
if(($i=array_search($ip, $ip_rev)) !== FALSE) { // Ip adresse finnes
 //sjekk om tiden er eldre enn en time. Bruk $saved_time[$i]
 if((time-$saved_time[$i])<(60*60)) {
    // Skriv til fil
 else {
    // Ikke skriv til fil
 }
else {
 // Ip adresse finnes ikke, legg den til på slutten av filen
}

 

Dette forutsetter bruk av time for å lagre tiden, noe du ikke har, ser jeg.

 

Scriptet er ikke på noen måte testet ut, og funker nok sikkert ikke, men håper du ser hvordan du kan løse det...

 

Til slutt vil jeg anbefale deg å bytte til en databaseløsning (mySQL) dersom du har mulighet til det.

Det vil gjøre ting veldig mye enklere, og ikke minst raskere

 

/k

Endret av kakkle
Lenke til kommentar

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...