Blib Skrevet 13. juni 2003 Del Skrevet 13. juni 2003 Okay, for å sette meg inni PHP og filbehandling ++, bestemte jeg meg for å lage en teller som kunne gjøre følgende: 1: Opprette en fil, tall.php, hvor den lagret to verdier, på hver linje. Den første verdien var et tall som skulle øke med en for hver gang siden ble lastet, den andre skulle øke med en, KUN hvis brukeren ikke hadde besøkt siden før, eller brukeren ikke hadde postet en annen beskjed der den dagen. 2: Øke verdiene. 3: Skrive ut verdiene Det virket ganske greit, men etter å ha slitt litt med både det ene og den andre må jeg gi opp. Koden kan virke litt dustete, men det er for å få det mest mulig oversiktlig, og lettvint. Jeg hadde før noen "branches", if inni if, men det ble for uoversiktlig og jeg mistet styr på hele greiene, på grunn av at det ikke fungerte. Så her følger koden: <html> <head> <title>Teller</title> </head> <body> <?php $a = 0; er dette nødvendig forresten, eller blir alle variabler nullstilt (false) når scriptet kjøres igjen? $b = 0; $nummer = file("tall.php"); $antall_sidevisninger = $nummer[0]; $antall_unike_sidevisninger_24h = $nummer[1]; $antall_sidevisninger = $antall_sidevisninger+1; $ip_dato= date("yz"); $ip = "$REMOTE_ADDR"; $fil = "ip.php"; $iper = file($fil); $linjer = count($iper); $pos = strpos($iper[$i], $ip); for ($i=0; $i<$linjer; $i++) { Her kommer det av koden som ikke går så bra if ($pos == true) { $a = 1234567890; } Lagde disse $a osv for å unngå branching... if (($a == 1234567890) AND ($ip_dato > $iper[$i+1])) { $antall_unike_sidevisninger_24h = $antall_unike_sidevisninger_24 + 1; $b = 0987654321; } if ($pos == false) { $b = 0987654321; } if ($b == 0987654321) { $fp = fopen($fil, "w"); for($j; $j<$linjer; $j++) { fwrite($fp, "$iper[$j].'n'"); } $fp = fopen($fil, "a"); fwrite($fp, "$ipn"); fwrite($fp, "$ip_datonn"); } } $fil = "tall.php"; $fp = fopen($fil, "w"); fwrite($fp, "$antall_sidevisningerrn$antall_unike_sidevisninger_24h"); fclose($fp); print ("Antall sidevisninger totalt: $antall_sidevisninger <br>Antall unike brukere (24 timers timeout): $antall_unike_sidevisninger_24h"); for ($i=0; $i<$linjer; $i++) { Bare lagt til for meg selv, så jeg kan se at iallefall noe funker, og lettere finne ut hvor feilen ligger. print ("<p>$iper[$i]</p>"); } print ("<p><b>$linjer</b></p>"); print ("$a <br> $b"); ?> </body> </html> Lenke til kommentar
Raggi Skrevet 13. juni 2003 Del Skrevet 13. juni 2003 ikkje bli lei deg, da går sikkert bra til slutt! :smile: Lenke til kommentar
me Skrevet 22. juni 2003 Del Skrevet 22. juni 2003 Orker ikke å se på koden din, sorry. men Har selv laget en counter akkurat (nesten, bortsett fra at den lar brukeren (ipen) increase counteren hvis det er mer enn 24 timer siden sist han var der) som du beskriver før. Du kan jo kikke på den, så skønner du kanskje hvordan du kan få det til sub/func.php: <?php //counter file define('COUNTERFILE','sub/counter/count.txt'); //functions for counter function counter_insert($ip, $timestamp){ $return = false; //open file and put it into an array $fd = fopen(COUNTERFILE, 'r') or die("could not open counter file for reading"); $fil = fread($fd, filesize(COUNTERFILE)); $file = explode("n",$fil); $ret = false; foreach($file as $check){ $arr = explode('@', $check); if($arr[0] == $ip){ if((time() - $arr[1]) < 86400){ $ret = true; } } } if(!$ret){ //user has not been here within the last 24 hrs //insert record $fd = fopen(COUNTERFILE, 'a') or die("could not open counter file for writing"); $fwrite = fwrite($fd, $ip.'@'.$timestamp."n") or die("could not write to counter file"); $return = true; } return($return); } function counter_display(){ $fd = fopen(COUNTERFILE, 'r') or die("could not open counter file for reading"); $fil = fread($fd, filesize(COUNTERFILE)); $file = explode("n",$fil); $count = 0; foreach($file as $file2){ $count++; } return($count-1); } ?> putt dette i en fil (sub/func.php i dette eksempelet) og inkluder det i siden du vil sette inn eller vise telleren. som dette: index.php: <?php require("sub/func.php"); //insert counter things if(counter_insert($_SERVER['REMOTE_ADDR'], time())){ header('location: '.$_SERVER['PHP_SELF']); } ?> <html> <head> <title>Counter</title> </head> <body> You are visitor No. <?php print(counter_display()); ?> </body> </html> Lykke til! 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å