On Fri, April 20, 2007 11:06 am, Amos Vryhof wrote: > I build websites for a lot of people, and many of them want statistics > and hit counters for their websites. Webalizer Analog You can probably find binaries for both, or download logfiles and run them offline or... > Since not all of them are on a dedicated or virtual host, I cobbled > together a script that builds log files, and displays a graphical hit > counter, and another script that runs Webalizer and goes to the > report. Wait... You CREATE logfiles from PHP as if they were Apache logfiles, and run them through Webalizer?... Surely the host provides access to log files, no?... > My dilemma is that the hit counter portion of the script works at > first, > then at some point loses track, and displays a number that is way off > from the actual number. Way off low, or way off high? > I was originally using code that read the number from a text file, > added > 1 to it, then wrote it back using file_get/put_contents. > > Since then I have changed to > > if (file_exists($logfile)) { > $fp = fopen("$logfile", "r+"); > flock($fp, 1); > $count = fgets($fp, 4096); > $count += 1; > fseek($fp,0); Seems to me you need another flock($fp, 2) here to get exclusive write access to the file... Otherwise, you haven't avoided the race condition at all, you've just added a bunch of flock calls that don't do much of anything... > fputs($fp, $count); > flock($fp, 3); > fclose($fp); > } else { > echo "Can't find file, check '\$logfile'<BR>"; > } > > which I found in an example somewhere (maybe on the example code > page?) > but that seems to lose track as well. -- Some people have a "gift" link here. Know what I want? I want you to buy a CD from some indie artist. http://cdbaby.com/browse/from/lynch Yeah, I get a buck. So? -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php