|
|||||||||||||||||||||||||||
Så er jeg på spanden igen.
Jeg har et lille script, som laver en hit counter til en
hjemmeside. Det virker fint nok, men en sjælden gang vælger tælleren
at starte fra nul.
Jeg formoder at dette sker fordi der ikke er nogen semafor for
operationer på filen indeholdende tælleren. Hvad kan jeg gøre for at
sikre, at kun 1 bruger har fat i filen på et givent tidspunkt?
Jeg vedlægger scriptet (som jeg har hugget andetsteds fra og
modificeret lidt) som bilag:
#!/usr/bin/perl
# Gif images should be named as 0.gif, 1.gif, ..., 9.gif
#
# Permission is granted to copy and redistribute this program if this notice
# remains intact.
#
# Written by sslug@sslug 12 Feb. 1997
# based on the "Matt's cgi counter" at http://www.worldwidemart.com/
#
# If you find "&" preceded "lt" or "gt",
# replace these three letters by "<" or ">" respectively.
$| = 1;
$image = "http://www.kampsax.dtu.dk/~and/plopup/cgi-bin/gifdigits";
$count = $ARGV[0];
# Get counter number and increment it
open(COUNT,"$count") || die "Can't open count data file for Reading: $!\n";
$c = <COUNT> ;
close(COUNT);
if ($count =~ /\n$/) {
chop($c);
}
$c++;
open(COUNT,">$count") || die "Can't open count data file for Writing: $!\n";
####### Det er her, jeg formoder at en anden proces kan gå ind og læse
####### en tom fil, så den starter forfra.
print COUNT "$c";
close(COUNT);
# Determine counter width
$num = $length = length($c);
# Set Individual Counter Numbers Into Associative Array
while ($num > 0) {
$CHAR{$num} = chop($c);
$num--;
}
# Output gif images to Web server
$j = 1;
# print "<img src=\"$image/0.gif\">";
# print "<img src=\"$image/0.gif\">";
while ($j <= $length) {
print "<img src=\"$image/$CHAR{$j}\.gif\">";
$j++;
}
exit(0);
--
Regards, Anders If a Microsoft product
(address is valid) fails, who do you sue?
|
||||||||||||||
|
||||||||||||||