|
|
 |

|

 |

| Community » CGI: Allgemeines Forum |
|
Counter kaputt. . .
|
Seitenanfang |
| Hi, ich hab mir (versucht) einen counter zu programmieren und das ging eigentlich auchganz gut, bis ich gesehen habe, das er dauernd resetet. Kann mir vielleicht jemand sagen, woran das liegen könnte? Hier das script:
if (-e "/var/www/guest/counter.txt") { open (COUNT, "</var/www/guest/counter.txt"); $counter = <COUNT>; close (COUNT);$counter = ++$counter; open (COUNT, ">/var/www/guest/counter.txt"); print COUNT "$counter"; close (COUNT); } if (!-e "/var/www/guest/counter.txt") { open (COUNT, ">/var/www/guest/counter.txt"); print COUNT "1"; close (COUNT); } if ( length ($counter) == 1) { $counter = ("000$counter"); } elsif ( length ($counter) == 2) { $counter = ("00$counter"); } elsif ( length ($counter) == 3) { $counter = ("0$counter"); } elsif ( length ($counter) == 4) { $counter = ($counter); } if ($counter =~ /^(\d)(\d)(\d)(\d)$/) { $tausend = $1; $hundert = $2; $zehn = $3; $einer = $4; }
und dann eben später : print "<img src=\"../counter/$tausend.gif\"><img src=\"../counter/$hundert.gif\"><img src=\"../counter/$zehn.gif\"><img src=\"../counter/$einer.gif\">"; jemand ne idee? thx schonmal
Datum: 23.02.2005-17:36

|
re: Counter kaputt. . .
|
Seitenanfang |
Ich sehe da jetzt keinen Fehler, aber ich würde das ein wenig anders schreiben:[code] my $counter = 1; my $file = "/var/www/guest/counter.txt"; if (-e $file){ open (COUNT, "<$file") or die $!; chomp($counter = <COUNT>); close (COUNT);$counter = ++$counter; } open (COUNT, ">$file") or die $!; print COUNT $counter; close (COUNT); $counter = sprintf("%04d",$counter); if ($counter =~ /^(\d)(\d)(\d)(\d)$/){ $tausend = $1; $hundert = $2; $zehn = $3; $einer = $4; }
Datum: 23.02.2005-18:30

|
re: Counter kaputt. . .
|
Seitenanfang |
Hmm, jetzt geht der counter gar nicht mehr. Er inkrementiert nicht mehr. Aber ich seh darin wirklich keinen fehler :-( Kann mir vielleicht doch jemand helfen?P.S.: @renee , ich hab deinen Vorschla mal versucht, er geht nicht, aber die sprintf variante habe ich übernommen.thx
Datum: 24.02.2005-22:50

|
re: Counter kaputt. . .
|
Seitenanfang |
| Gibt's denn ne Fehlermeldung...
Datum: 25.02.2005-08:39

|
re: Counter kaputt. . .
|
Seitenanfang |
Nein, er macht einfach nix. Und das auslesen der datei funtzt auch nicht mehr. . . Ich glaub, ich lass den counter jetzt einfach weg:-(
Datum: 25.02.2005-11:41

|
re: Counter kaputt. . .
|
Seitenanfang |
Hallo > Ich glaub, ich lass den counter jetzt einfach weg:-(Die Perl-FAQ ist mit dir :-) Zitat: "Didn't anyone ever tell you web-page hit counters were useless? They don't count number of hits, they're a waste of time, and they serve only to stroke the writer's vanity. It's better to pick a random number; they're more realistic." Aber wenn man es machen will sagt einem die FAQ auch wie es geht. Anyway, this is what you can do if you can't help yourself. use Fcntl qw(:DEFAULT :flock); sysopen(FH, "numfile", O_RDWR|O_CREAT) or die "can't open numfile: $!"; flock(FH, LOCK_EX) or die "can't flock numfile: $!"; $num = <FH> || 0; seek(FH, 0, 0) or die "can't rewind numfile: $!"; truncate(FH, 0) or die "can't truncate numfile: $!"; (print FH $num+1, "\n") or die "can't write numfile: $!"; close FH or die "can't close numfile: $!";
Gruss Kristian
Datum: 25.02.2005-13:40

|
re: Counter kaputt. . .
|
Seitenanfang |
Na ja, danke für den Hinweis, aber wenn ich einen fertigen Counter wollte, hätte ich google zu rate gezogen ;D Ich bin ziemlich neu, was Perl angeht und würde deshalb eigentlich auch gerne Fehler finden, zwecks lerneffekt. . .
Datum: 25.02.2005-14:20

|
re: Counter kaputt. . .
|
Seitenanfang |
Hallo Dein Code ist nicht stabil, da du die Datei zweimal anfasst. Zwischen Lesen und Neuschreiben können andere Prozesse "falsche" werte auslesen. Viel schlimmer ist aber das zweite Öffnen. Hier machst du mit open(FILE,"> conter.txt") die Datei kaputt bzw. leer. Der Prozess der die Datei in dem Moment liest hat den Counterstand 0.Ansonsten solltest du nicht google fragen sondern perldoc. Das ist dein tägliches Brot wenn du Perl lernen willst. Es ist sogar auf deiner Festplatte ;-) Gruss Kristian
Datum: 25.02.2005-15:18

|
|

|

|

|
 |

|

|
|