Stella Pauley
asked on
Perl CGI Counter randomly skips
I am using the code below to count hits on a web site.
Problem is it randomly skips on the tenth digit?
For example 10 may show up but 20 shows as 10..:
5,6,7,8,9,10,11,12,13,14,1 5,16,17,18 ,19,10,21, 22,23,24,2 5,26,27,28 ,29,20,31, 32
This is random.. sometimes the tenth digit is correct sometimes it doesn't increment until the last digit hits 1.
This does not use FLY or SSI.. it is called with the following html:
<img src="http://website/cgi-bin/counter.cgi?1">
<img src="http://website/cgi-bin/counter.cgi?0&w">
Here's the code:
-------------------------- ---------- ---------- ---------- -------
$digits_basedir = "http://website/cgi-bin/counter/";
$count_file = "count";
($place, $Write) = split(/\&/,$ENV{QUERY_STRI NG});
open(COUNT,"$count_file") || die "Can't Read From Count File $count_file, Error : $!\n";
($count) = <COUNT>;
close(COUNT);
$count =~ s/\n//;
if ($Write =~ /w/i) {
$count++;
open(COUNT,">$count_file") || die "Can't Write To Count File $count_file, Error : $!\n";
print COUNT "$count";
close(COUNT);
}
$count = "0000000000".$count;
@chiffres = split(//, $count);
@chiffres = reverse(@chiffres);
print "Location: ".$digits_basedir.$chiffre s[$place]. ".gif\n\n" ;
Problem is it randomly skips on the tenth digit?
For example 10 may show up but 20 shows as 10..:
5,6,7,8,9,10,11,12,13,14,1
This is random.. sometimes the tenth digit is correct sometimes it doesn't increment until the last digit hits 1.
This does not use FLY or SSI.. it is called with the following html:
<img src="http://website/cgi-bin/counter.cgi?1">
<img src="http://website/cgi-bin/counter.cgi?0&w">
Here's the code:
--------------------------
$digits_basedir = "http://website/cgi-bin/counter/";
$count_file = "count";
($place, $Write) = split(/\&/,$ENV{QUERY_STRI
open(COUNT,"$count_file") || die "Can't Read From Count File $count_file, Error : $!\n";
($count) = <COUNT>;
close(COUNT);
$count =~ s/\n//;
if ($Write =~ /w/i) {
$count++;
open(COUNT,">$count_file")
print COUNT "$count";
close(COUNT);
}
$count = "0000000000".$count;
@chiffres = split(//, $count);
@chiffres = reverse(@chiffres);
print "Location: ".$digits_basedir.$chiffre
I'm guessing the browser or your ISP is caching the image since the URL for the digits isn't changing. Try adding a &x to the <img src="http://website/cgi-bin/counter.cgi?1"> so it becomes <img src="http://website/cgi-bin/counter.cgi?1&x"> that may get the cache into thinking it is dynamic (which it doesn't think it is currently). The other thing to try is get to 19. close the browser, clear your cache and then go to the page and see if it pops up as 20.
ASKER
I set it to &x and had the same problem.
I also ran it up to 119, closed the browser, opened browser, deleted cache files, then hit the page and got 110 instead of 120. then 121..
Thanks, any other ideas?
I also ran it up to 119, closed the browser, opened browser, deleted cache files, then hit the page and got 110 instead of 120. then 121..
Thanks, any other ideas?
I may be barking up the wrong tree, but I still think it is a cache issue, probably the ISP or your network proxy server.
You might try putting the meta tags:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
<META HTTP-EQUIV="Expires" CONTENT="-1" />
on your web page and see if that makes any difference.
You might try putting the meta tags:
<META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
<META HTTP-EQUIV="Expires" CONTENT="-1" />
on your web page and see if that makes any difference.
ASKER
Same results with the meta tags.
Same results with or without going through a proxy.
Same results with or without going through a proxy.
ASKER
You may be right on the caching though..
When the web shows 250 the count text file shows 260.
When the web shows 250 the count text file shows 260.
Try changing
print "Location: ".$digits_basedir.$chiffre s[$place]. ".gif\n\n" ;
to
print "Location: ".$digits_basedir.$chiffre s[$place]. ".gif?".$c ount.'\n\n ";
print "Location: ".$digits_basedir.$chiffre
to
print "Location: ".$digits_basedir.$chiffre
oops - typo
print "Location: ".$digits_basedir.$chiffre s[$place]. ".gif?".$c ount."\n\n ";
print "Location: ".$digits_basedir.$chiffre
ASKER
same results...
Really!? When you right click (windows I hope) the image and look at the properties what does it show as the URL for the images? or look at the source.
ASKER
properties of each image show:
http://website/cgi-bin/counter.cgi?1&x
images are layed out as:
4&x 3&x 2&x 1&x 0&w
Here's the "View Source" (yes its windows)
-------------------------- ---------- ----------
<HTML>
<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
<META HTTP-EQUIV="Expires" CONTENT="-1" />
</head>
<body>
<img src="http://website/cgi-bin/counter.cgi?4&x">
<img src="http://website/cgi-bin/counter.cgi?3&x">
<img src="http://website/cgi-bin/counter.cgi?2&x">
<img src="http://website/cgi-bin/counter.cgi?1&x">
<img src="http://website/cgi-bin/counter.cgi?0&w">
</body></HTML>
http://website/cgi-bin/counter.cgi?1&x
images are layed out as:
4&x 3&x 2&x 1&x 0&w
Here's the "View Source" (yes its windows)
--------------------------
<HTML>
<head>
<META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
<META HTTP-EQUIV="Expires" CONTENT="-1" />
</head>
<body>
<img src="http://website/cgi-bin/counter.cgi?4&x">
<img src="http://website/cgi-bin/counter.cgi?3&x">
<img src="http://website/cgi-bin/counter.cgi?2&x">
<img src="http://website/cgi-bin/counter.cgi?1&x">
<img src="http://website/cgi-bin/counter.cgi?0&w">
</body></HTML>
Do you have the ability to change the links to https (page and the image links)? Just for the sake of testing?
ASKER
Ability... Yes...
But I don't have a Certificate file for the ssl..
IIS v5.1
But I don't have a Certificate file for the ssl..
IIS v5.1
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
IIS won't let me use ssl without a certificate file..
Thanks for the help..
Thanks for the help..
ASKER
I found the problem.. the &w was in the wrong spot..
I had it pulling image 4, 3, 2, 1, writing to the log file, then pulling image 0...
I moved the &w first image source (the one with a 4) instead of the on with the 0..
this way it writes to the log file then pulls image 4, 3, 2, 1, 0...
I still did need the cache disabled.. without that it then randomly skipped any digit..
Thanks for the help...
I had it pulling image 4, 3, 2, 1, writing to the log file, then pulling image 0...
I moved the &w first image source (the one with a 4) instead of the on with the 0..
this way it writes to the log file then pulls image 4, 3, 2, 1, 0...
I still did need the cache disabled.. without that it then randomly skipped any digit..
Thanks for the help...