BigJackW Skrevet 31. januar 2006 Del Skrevet 31. januar 2006 (endret) Hei Jeg trenger hjelp av noen som kan hjelpe meg med å gjøre slik at visit counter scriptet mitt viser hvor mange som er på sida akkurat NÅ. Scriptet viser dette nå: » I dag: 17 » I går: 34 » Totalt: 206 » Besøk pr. dag: 23 Noen som har noe å bidra med? Jeg kan sia at alle visitene og ip'ene blir lagra i flat filer. Edit:La til filene. Det er 3 filer i tillegg til de som er der; count.db:00%00%00%0000 00 00%0 De to første nullene er for besøk i dag, De to neste er for besøk i går, De to neste er for totalt besøk, De åtte neste er for dagens dato og de 2 siste er for besøk pr dag. ip.db: Der lagres alle ip'ene som besøker sida. Index.html: den er tom. counter.php Endret 31. januar 2006 av BigJackW Lenke til kommentar
stian90_2 Skrevet 31. januar 2006 Del Skrevet 31. januar 2006 <?php $gammel = file("online.txt"); $online_tid = time(); $timeout = $online_tid - 180; $online_fil = fopen("data/online.txt", w); fwrite($online_fil, "$REMOTE_ADDR|$online_tid\n"); foreach($gammel as $online_linje) { $online_arr = explode("|", $online_linje); if($online_arr[1] > $timeout) { fwrite($online_fil, "$online_linje"); } } fclose($online_fil); $ny = file("data/online.txt"); $ips_arr = array(); foreach($ny as $ny_online_linje) { $ny_online_arr = explode("|", $ny_online_linje); $ip = $ny_online_arr[0]; if (!isset($ips_arr[$ip])) { $ips_arr[$ip] = "1"; } } $antall_online = sizeof($ips_arr); echo" $antall_online"; ?> Den skulle funkere =) husk og lag online.txt og chmode til 666 Lenke til kommentar
BigJackW Skrevet 31. januar 2006 Forfatter Del Skrevet 31. januar 2006 (endret) Nei den fungerer ikke. Den viser bare: » Brukere online: 1 uansett hvor mange som er innpå sida. Edit: Dette kommer i online.txt fila: |1138734305 |1138734297 |1138734260 |1138734259 |1138734254 |1138734246 |1138734246 |1138734245 |1138734245 |1138734244 |1138734243 |1138734242 |1138734241 |1138734239 |1138734238 |1138734237 |1138734235 |1138734234 |1138734234 |1138734232 |1138734231 |1138734231 |1138734229 |1138734229 |1138734229 |1138734224 |1138734205 |1138734204 |1138734203 |1138734203 |1138734202 |1138734200 |1138734199 |1138734198 |1138734197 |1138734196 |1138734178 |1138734172 |1138734171 |1138734170 |1138734169 |1138734168 |1138734166 |1138734165 |1138734163 |1138734161 |1138734161 |1138734160 |1138734156 |1138734155 |1138734154 |1138734154 |1138734153 |1138734152 |1138734151 |1138734151 |1138734150 |1138734149 |1138734147 |1138734147 |1138734147 |1138734146 |1138734145 |1138734136 |1138734134 |1138734132 Endret 31. januar 2006 av BigJackW Lenke til kommentar
BigJackW Skrevet 5. februar 2006 Forfatter Del Skrevet 5. februar 2006 Ingen som har noe tips? Lenke til kommentar
NH Skrevet 5. februar 2006 Del Skrevet 5. februar 2006 dette kan gjøres ved hjelp av mysql eller lignende på en veldig enkel måte. Lag en tabell som ser slik ut: IP | varchar(20) tid | timestamp lagre ip adressen til de som surfer der sammen med unix time ( time() i php) oppdater om mulig og oppdater kolonnen for hver gang det refreses med time()+900 da kan du hente ut alle linjer som har tid > time() slik jeg gjør det i allefall... altså: 1: Sjekk om serferens ip finnes i db fra før: 2: Om funnet, oppdater denne med time() + 900 (15 min) 3: Om ikke funnet, legg til ny rad 4: SELECT * from online WHERE tid > time() så er det bare å printe ut mysql_num_rows() Lenke til kommentar
BigJackW Skrevet 5. februar 2006 Forfatter Del Skrevet 5. februar 2006 Er veldig grønn på PHP så er det mulig jeg kan få ditt scipt eller at noen kan hjelpe meg ? Lenke til kommentar
NH Skrevet 6. februar 2006 Del Skrevet 6. februar 2006 (endret) Jada. Det kan du, merk: denne er kun alpha testet, så om du finner noe feil si ifra, men den fungerer altså her, men ikke prøvd med flere brukere. Den teller heller ikke totalt besøkende med unik treff på 24 timer, men kun unik treff på ip (altså teller kun 1 gang per ip uansett hvor lang tid det er mellom hvert besøk) dette kan selfølgelig legges til om ønskelig. Scriptet er laget i OOP så her er klassen. lagre som online.class.php (husk å redigere den øverste delen i minsql klassen som hostname, username etc, endre også standard databasen som du finner inne i () i minsql funskjon deklarasjonen: function minsql($db = 'databasen_min') <?php class minsql{ var $hostname = 'localhost'; var $username = 'root'; var $password = ''; var $db; function minsql($db = 'test'){ $this->db = $db; $ret = mysql_connect($this->hostname, $this->username, $this->password); mysql_select_db($db, $ret); return $ret; } function getDB(){ return $this->db; } } class online extends minsql { var $ip; var $conn; function online(){ $this->conn = parent::minsql(); $ip = $_SERVER['REMOTE_ADDR']; $this->ip = $ip; $sql = "SELECT time FROM online WHERE ip='$ip'"; $result = mysql_query($sql); if(!$result){ $this->addip(); } else { $num = mysql_num_rows($result); if( $num == 1){ $this->refreship(); } else if ($num > 1){ $this->eraseip(); $this->addip(); } else { $this->addip(); } } } function addip(){ $sql = sprintf("INSERT into online (ip, time, dato) VALUES ('%s', %d, NOW())", $this->ip, time()+900); $result = mysql_query($sql); } function refreship(){ $sql = sprintf("UPDATE online SET time=%d, dato=NOW() WHERE ip='%s'", time()+900, $this->ip); $result = mysql_query($sql) or die(mysql_error()); } function eraseip(){ $sql = "DELETE from online WHERE ip='$this->ip'"; $result = mysql_query($sql); } function end(){ mysql_close($this->conn); } function visidag(){ $sql = "SELECT * FROM online WHERE dato = CURRENT_DATE()"; $result = mysql_query($sql) or die(mysql_error()); return mysql_num_rows($result); } function visonline(){ $sql = sprintf("SELECT ip FROM online WHERE time > '%d'", time()); $result = mysql_query($sql); if(!$result){ return 0; } return mysql_num_rows($result); } function visunike(){ $sql = "SELECT ip FROM online"; $result = mysql_query($sql); if(!$result){ return 0; } return mysql_num_rows($result); } } ?> Her er SQLen for å lage db en CREATE TABLE `online` ( `ip` varchar(20) collate latin1_general_ci NOT NULL default '', `time` int(15) default NULL, `dato` date NOT NULL default '0000-00-00' ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; Her er et VELDIG enkelt eksempel på bruk: <?php //helt øverst på alle sider som skal telle/vise statestikken require_once('online.class.php'); $online = new online(); //der du vil det skal vises kan du bruke disse klasse komandoene echo '<br />'; echo "Online: ". $online->visonline() ."<br />"; echo "Besøk i dag: ". $online->visidag() ."<br />"; echo "Unike treff:". $online->visunike() ."<br />"; ?> Har du flere spørsmål så si ifra Endret 6. februar 2006 av NH Lenke til kommentar
BigJackW Skrevet 6. februar 2006 Forfatter Del Skrevet 6. februar 2006 Jo takk. Jeg skal teste denne når jeg kommer hjem fra skolen. Lenke til kommentar
power Skrevet 6. februar 2006 Del Skrevet 6. februar 2006 <?php $gammel = file("online.txt"); $online_tid = time(); $timeout = $online_tid - 180; $online_fil = fopen("data/online.txt", w); fwrite($online_fil, "$REMOTE_ADDR|$online_tid\n"); foreach($gammel as $online_linje) { $online_arr = explode("|", $online_linje); if($online_arr[1] > $timeout) { fwrite($online_fil, "$online_linje"); } } fclose($online_fil); $ny = file("data/online.txt"); $ips_arr = array(); foreach($ny as $ny_online_linje) { $ny_online_arr = explode("|", $ny_online_linje); $ip = $ny_online_arr[0]; if (!isset($ips_arr[$ip])) { $ips_arr[$ip] = "1"; } } $antall_online = sizeof($ips_arr); echo" $antall_online"; ?> Den skulle funkere =) husk og lag online.txt og chmode til 666 5529549[/snapback] Husk at $REMOTE_ADDR ikke vil fungere på alle PHP-servere pga register_globals kan være slått av. Husk alltid å bruke $_ på slike variabler. $_SERVER["remote_addr"] f.eks.. Imo, så er det en stygg uvane å kode phpkode som er avhenig av at register_globals er satt til on Lenke til kommentar
BigJackW Skrevet 6. februar 2006 Forfatter Del Skrevet 6. februar 2006 (endret) Edit: NH: Jeg tok bort noe av den siste koden slik at det står bare dette igjen: echo "Brukere online:". $online->visonline() ."<br />";?> For jeg har de andre counterne på sida, men hvor lang tid "holder" mysql på ip'ene til de som er inne på sida? Og da meneer jeg "online" statusen! Endret 6. februar 2006 av BigJackW Lenke til kommentar
NH Skrevet 6. februar 2006 Del Skrevet 6. februar 2006 (endret) databasen oppdateres med ett kvarter for hver refresh. den koden om bruk var der for eksempel så du så alle mulighetene, Infoen lagres i databsen uansett da det kun er snakk om forksjellige SQL spørringer som utgjør den forskjellige infoen. annbefaler å bruke $online->end() etter visning av alle tellerne da den da kjører mysql_close() opp mot koblingen sin til mySQL. eventuelt kan du legge til: $this->end() nederst i visonline() funksjonen. så sparer du deg for en linje i index fila di. Endret 6. februar 2006 av NH Lenke til kommentar
BigJackW Skrevet 6. februar 2006 Forfatter Del Skrevet 6. februar 2006 (endret) Tilsvarer ikke 900 sekund 15 min? Tror det er sjelden det er noen innpå der 15 min den koden om bruk var der for eksempel så du så alle mulighetene, Infoen lagres i databsen uansett da det kun er snakk om forksjellige SQL spørringer som utgjør den forskjellige infoen. annbefaler å bruke $online->end() etter visning av alle tellerne da den da kjører mysql_close() opp mot koblingen sin til mySQL. eventuelt kan du legge til: $this->end() nederst i visonline() funksjonen. så sparer du deg for en linje i index fila di. Jeg skjønner ikke hva du mener?!? Endret 6. februar 2006 av BigJackW Lenke til kommentar
NH Skrevet 6. februar 2006 Del Skrevet 6. februar 2006 900sek / 60sek = 15min (60 sekunder i 1 minutt ) jeg sa de andre mulighetene (som unike treff, og treff i dag) kun er andre spørringer opp mot samme informasjon. legg til: $online->end() etter $online->visonline() Lenke til kommentar
BigJackW Skrevet 6. februar 2006 Forfatter Del Skrevet 6. februar 2006 Rett etter $online->visonline() eller? Lenke til kommentar
NH Skrevet 6. februar 2006 Del Skrevet 6. februar 2006 ja. etter at du er ferdig med å vise info fra klassen. 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å