christdi Skrevet 25. april 2006 Del Skrevet 25. april 2006 (endret) 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 25. april 2006 av christdi Lenke til kommentar
kakkle Skrevet 26. april 2006 Del Skrevet 26. april 2006 (endret) 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 26. april 2006 av kakkle Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå