HoaXed Skrevet 5. februar 2008 Del Skrevet 5. februar 2008 (endret) Hallo, har problemer med siden vår her http://www.fredrikstad-cup.no og våres logging. Bruker loggføring med sidevisninger samt unike visninger pr 60 minutt med kaker. Problemet er at hver tredje, fjerde dag så resetter hele seg automatisk til enten 0, eller noen andre ganger faktisk helt virkårlig tall. Koden jeg har skrevet er; <?php // BESØKSSTATISTIKK AV HOAXED BASE FOR FREDRIKSTAD CUP $side = $_GET['s']; $ufil = "/home/2/f/fredrikstad-cup/www/08/logg/stats/unike.txt"; $tfil = "/home/2/f/fredrikstad-cup/www/08/logg/stats/total.txt"; $cookie = $_COOKIE['FC_VISNINGER']; // TELLER ANTALL BESØKENDE PÅ FORSIDEN if(!($cookie == "1")) { list($utreff) = file($ufil); $usfil = fopen($ufil, 'w'); fwrite($usfil, $utreff + 1); fclose($usfil); setcookie("FC_VISNINGER","1", time()+60*60, "/"); } // TELLER ANTALL SIDEVISNINGER list($ttreff) = file($tfil); $tsfil = fopen($tfil, 'w'); fwrite($tsfil, $ttreff + 1); fclose($tsfil); ?> Hvordan kan jeg ungå dette? SQL?, vil det da gå tregere hvis jeg skal åpne databasen, skrive til to tabeller, og så lukke den istedet for å skrive til to filer? Endret 5. februar 2008 av HoaXed Lenke til kommentar
vidarlo Skrevet 5. februar 2008 Del Skrevet 5. februar 2008 Bruk SQL. Tipper den muligens resetter seg dei gangane to instanser av PHP kommer i konflikt på timinga. Lenke til kommentar
Ernie Skrevet 6. februar 2008 Del Skrevet 6. februar 2008 (endret) Uten at jeg har noen som helst mulighet til å sjekke det så antar jeg nesten det her kommer av flere samtidige redigeringer, altså fila blir ikke låst for «exclusive» redigering. Løsningen på problemet er flock(...). Endret 6. februar 2008 av Ernie Lenke til kommentar
HoaXed Skrevet 8. februar 2008 Forfatter Del Skrevet 8. februar 2008 Uten at jeg har noen som helst mulighet til å sjekke det så antar jeg nesten det her kommer av flere samtidige redigeringer, altså fila blir ikke låst for «exclusive» redigering. Løsningen på problemet er flock(...). Bruker jeg denne funksjonen og to stk da redigerer samtidig. Vil loggtelleren da bare telle en stk, og ikke to? Takk for tipset forresten Lenke til kommentar
Stian Jacobsen Skrevet 8. februar 2008 Del Skrevet 8. februar 2008 Bruk mysql og endre cookies til session lite eksempel $q = " SELECT COUNT(ip) FROM counter WHERE ip='{$ip_adresse}' AND DATE_FORMAT(besoksdato, '%d/%m/%Y') = DATE_FORMAT(NOW(), '%d/%m/%Y') "; $e = mysql_query($q); $r = mysql_fetch_assoc($e); if($r['COUNT(ip)'] == 1) { $query = "UPDATE counter SET besoksdato=date("Y-m-d h:i:s"), hits=hits+1 WHERE ip='".$ip_adresse."'"; } else { $query = "INSERT INTO counter (ip,besoksdato,hits) VALUES ('".$ip_adresse."', date("Y-m-d h:i:s"), 1)"; } @mysql_query($query) or die ("stats failed!"); Dersom jeg ikke har glemt så mye sql, så skal denne sjekke brukere for dagen, dersom en bruker er logget oppdatererer scriptet raden.. Lenke til kommentar
Ernie Skrevet 8. februar 2008 Del Skrevet 8. februar 2008 Uten at jeg har noen som helst mulighet til å sjekke det så antar jeg nesten det her kommer av flere samtidige redigeringer, altså fila blir ikke låst for «exclusive» redigering. Løsningen på problemet er flock(...). Bruker jeg denne funksjonen og to stk da redigerer samtidig. Vil loggtelleren da bare telle en stk, og ikke to? Takk for tipset forresten Det var det da. Her burde manualen pressisert hva den gjør. Det er nemlig to muligheter. Enten venter flock til den kan få en lock på fila, eller så returnerer den false. Man skulle tro at flock gir false hvis den ikke får lock (for å forhindre deadlock), men flock vil faktisk vente til den får lock. Mao. den vil telle som normal siden det til enhver tid bare er en som redigerer fila. Alle andre vil vente til fila er ledig for så å skrive. Lenke til kommentar
HoaXed Skrevet 8. februar 2008 Forfatter Del Skrevet 8. februar 2008 Uten at jeg har noen som helst mulighet til å sjekke det så antar jeg nesten det her kommer av flere samtidige redigeringer, altså fila blir ikke låst for «exclusive» redigering. Løsningen på problemet er flock(...). Bruker jeg denne funksjonen og to stk da redigerer samtidig. Vil loggtelleren da bare telle en stk, og ikke to? Takk for tipset forresten Det var det da. Her burde manualen pressisert hva den gjør. Det er nemlig to muligheter. Enten venter flock til den kan få en lock på fila, eller så returnerer den false. Man skulle tro at flock gir false hvis den ikke får lock (for å forhindre deadlock), men flock vil faktisk vente til den får lock. Mao. den vil telle som normal siden det til enhver tid bare er en som redigerer fila. Alle andre vil vente til fila er ledig for så å skrive. Takk. Er ikke altfor god i engelsk til å lese meg til det der. Men prøver. Problemet er at det er vanskelig å teste ut Dette bør vell ikke forårsake til så mye ekstra ventetid på lastinga? Er sql alikevell raskere? Lenke til kommentar
Ernie Skrevet 8. februar 2008 Del Skrevet 8. februar 2008 (endret) Uten at jeg har noen som helst mulighet til å sjekke det så antar jeg nesten det her kommer av flere samtidige redigeringer, altså fila blir ikke låst for «exclusive» redigering. Løsningen på problemet er flock(...). Bruker jeg denne funksjonen og to stk da redigerer samtidig. Vil loggtelleren da bare telle en stk, og ikke to? Takk for tipset forresten Det var det da. Her burde manualen pressisert hva den gjør. Det er nemlig to muligheter. Enten venter flock til den kan få en lock på fila, eller så returnerer den false. Man skulle tro at flock gir false hvis den ikke får lock (for å forhindre deadlock), men flock vil faktisk vente til den får lock. Mao. den vil telle som normal siden det til enhver tid bare er en som redigerer fila. Alle andre vil vente til fila er ledig for så å skrive. Takk. Er ikke altfor god i engelsk til å lese meg til det der. Men prøver. Problemet er at det er vanskelig å teste ut Dette bør vell ikke forårsake til så mye ekstra ventetid på lastinga? Er sql alikevell raskere? Nope, dette er et samtidighetsproblem alle får så lenge flere skal skrive til samme fil samtidig. Mao. å bruke en database vil ikke medføre noen umiddelbart bedre ytelse. Til simple ting er rett og slett databaser «overkill», og tilbyr garantert dårligere ytelse. Endret 8. februar 2008 av Ernie Lenke til kommentar
HoaXed Skrevet 8. februar 2008 Forfatter Del Skrevet 8. februar 2008 Ok. Takk Ernie. Da prøver jeg Flock med en gang jeg får tilgang til min maskin Lenke til kommentar
HoaXed Skrevet 8. februar 2008 Forfatter Del Skrevet 8. februar 2008 Da har jeg oppdatert koden med følgende: <?php // BESØKSSTATISTIKK AV HOAXED BASE FOR FREDRIKSTAD CUP $side = $_GET['s']; $ufil = "/home/2/f/fredrikstad-cup/www/08/logg/stats/unike.txt"; $tfil = "/home/2/f/fredrikstad-cup/www/08/logg/stats/total.txt"; $cookie = $_COOKIE['FC_VISNINGER']; // TELLER ANTALL BESØKENDE PÅ FORSIDEN if(!($cookie == "1")) { list($utreff) = file($ufil); $usfil = fopen($ufil, 'w'); if (flock($usfil, LOCK_EX)) { fwrite($usfil, $utreff + 1); flock($usfil, LOCK_UN); } fclose($usfil); setcookie("FC_VISNINGER","1", time()+60*60, "/"); } // TELLER ANTALL SIDEVISNINGER list($ttreff) = file($tfil); $tsfil = fopen($tfil, 'w'); if (flock($tsfil, LOCK_EX)) { fwrite($tsfil, $ttreff + 1); flock($tsfil, LOCK_UN); } fclose($tsfil); ?> Lurer dog på om jeg har valgt riktig LOCK_X? Og har egentlig laste tiden blitt dårligere tro. www.fredrikstad-cup.no .. TRor ikke det. Glimrende! Lenke til kommentar
Martin A. Skrevet 9. februar 2008 Del Skrevet 9. februar 2008 Om noen skulle klikke inn på siden i nøyaktig samme millisekund som meg, så vil forsinkelsene flock skaper være minimale. Det er ikke store mengden som skal skrives til filen, så vi snakker vel om 1ms eller mindre. Lenke til kommentar
HoaXed Skrevet 9. februar 2008 Forfatter Del Skrevet 9. februar 2008 Takk folkens. Men er rart. Unike brukere har blitt nullet ut igjen. Uff. 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å