Man In Tan Posted February 21, 2011 Report Share Posted February 21, 2011 (edited) Code replaced with justsomeguy's code. This is the guest counter that has been on my site since almost its beginning. I can't see any errors, but sometimes it acts wonky. It is supposed to log each unique IP address once, so I'll know about how many people have visited. However, sometimes, it logs the same IP address twice in a row. I don't know if it logs old IP addresses again sometimes, because it is a lot of numbers it look through. I had this problem once on Apache / PHP4 and four times on Apache2 / PHP5.Does anyone see any errors I missed, or is my system just having issues?In addition, http://localhost/ used to have an IP address of 127.0.0.1 on Apache, but now its IP address appears to be"::1" on Apache2, which isn't even an IP address. But this is more of an enigma than an actual problem.EDIT: Script updated.EDIT (2): Script replaced. Edited February 22, 2011 by Man In Tan Link to comment Share on other sites More sharing options...
justsomeguy Posted February 21, 2011 Report Share Posted February 21, 2011 The 4096 each time you use fread is the number of bytes to read, so it's only going to read the first 4kb of the file. You may want to use something like file_get_contents or the regular file function instead. Link to comment Share on other sites More sharing options...
Man In Tan Posted February 21, 2011 Author Report Share Posted February 21, 2011 Yeah, that's a good idea. I just updated the script.It'll stop the IP counter from reaching a point where it will not read new IP addresses, but because "::1" is at the bottom of the list, but only once, I can safely say that isn't the problem. Link to comment Share on other sites More sharing options...
justsomeguy Posted February 21, 2011 Report Share Posted February 21, 2011 This may be easier to manage: <?php$fname = '/TanServer/Database/ipdatabase.txt';$ip_list = file($fname, FILE_IGNORE_NEW_LINES);$ip = $_SERVER['REMOTE_ADDR'];if (!in_array($ip, $ip_list)){ file_put_contents($fname, file_get_contents($fname) . "\n" . $ip);}$counter = '/TanServer/Database/ipcount.txt';$num = intval(file_get_contents($counter));file_put_contents($counter, ++$num);?> That will add the new IP to the list if it's not already there, increment the counter, and set $num to the value that the counter just got incremented to. Link to comment Share on other sites More sharing options...
Man In Tan Posted February 22, 2011 Author Report Share Posted February 22, 2011 Thank you! Hopefully that will stop double logging.As a side note, right after implementing your code, another weird IP address showed up ... "fe80::230:65ff:fe19:fdc3". Hmmm ..... Maybe Apache2 is having difficulties. Link to comment Share on other sites More sharing options...
justsomeguy Posted February 22, 2011 Report Share Posted February 22, 2011 Those are IPv6 addresses. Link to comment Share on other sites More sharing options...
Man In Tan Posted February 22, 2011 Author Report Share Posted February 22, 2011 (edited) All right. They may be showing up just now, because Apache 1.3 may have not been able to possess them.I'm trying to understand your code, but that last part baffles me. How does it increment the counter only for new guests, when it is not within the if(){} statement?EDIT: Upon further testing, it increments every page load. I'm moving it into the if(){} statement. Edited February 22, 2011 by Man In Tan Link to comment Share on other sites More sharing options...
justsomeguy Posted February 22, 2011 Report Share Posted February 22, 2011 That's right, it looked like your original code had a list of unique IP addresses, and a counter for every visit. If you just want to count the number of unique visitors you don't need another counter, you just count the number of IPs. You can get that with count($ip_list). Link to comment Share on other sites More sharing options...
Man In Tan Posted February 25, 2011 Author Report Share Posted February 25, 2011 No, it just looked like a separate hit counter because my code was jumbled and confusing looking.I was not aware of the file_put_contents() and file_get_contents() functions, but after seeing your code and looking them up, I realized that they were something I didn't think there was a function for, but thought there should be. I can also use that to simplify my forum script. I actually wrote custom functions to do that. A count() function, huh? that's neat. I just found the code to mimic my original code's other function (to display guest numbers) as well: "echo array_search($_SERVER['REMOTE_ADDR'], $ip_list) +1;". Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now