Schrift
[thread]48[/thread]

Counter Problem



<< >> 9 Einträge, 1 Seite
perl_maniac
 2003-09-24 13:24
#4578 #4578
User since
2003-09-13
4 Artikel
BenutzerIn
[default_avatar]
Hallo,

ich habe mir einen kleinen Counter gebastelt, der über img-Tags in die Seite eingebunden wird. Er funktioniert meistens auch einwandfrei, ab und zu jedoch tritt irgendein Fehler auf und er beginnt wieder bei Null zu zählen. Es wird einfach eine Zahl aus der einer Textdatei gelesen, diese ausgegeben, inkrementiert und wieder in die Textdatei geschrieben. Irgendwo muss aber ein Fehler sein, weil auf einmal Null ausgegeben wird und dann 1 in der Datei steht. Ich kann mir aber nicht erklären wo dieser Fehler ist.
Hier mal die relevanten Stellen des Quellcodes:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#Datei mit dem Zählerstand öffnen
open(COUNT,"<$countfile") || die "Konnte Zählerdatei nicht öffnen";
flock(COUNT,2);
#Zählstand in Variable $count einlesen
$count=<COUNT>;
close(COUNT);

#Ich habe festgestellt, dass in der Variablen einige überflüssige Leerzeichen enthalten sind, die die Anzahl der Stellen der Zahl verfälschen würden, daher entferne ich diese
$count=~s/\s//g;
#Zahlen aufsplitten
my @zahlen=split(//,$count);
...

#erhöhen der Zahl und in Datei schreiben
#Zähler erhöhen;
$count++;
#Datei zum schreiben öffnen
open(COUNT,">$countfile") || die "Konnte Zählerdatei nicht öffnen";
#exklusives Zugriffsrecht setzen
flock(COUNT,2);
print COUNT $count;
close(COUNT);
...



Meine Frage ist nun, ob irgend jemand eine Ahnung hat, wo hier ein Problem auftreten könnte? Meiner Meinung nach muss irgendwo im Leseprozess der Fehler auftreten, die Variable $count bleibt unintialisiert und wird dann auf 1 inkrementiert.
Vielleicht kann mir ja jemand helfen...

MfG
format_c
 2003-09-24 13:43
#4579 #4579
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Also so kann ich jetzt nichts entdecken, außer dass ich die substition duch
Code: (dl )
chomp $count;

ersetzen würde.
Binde oben doch mal bitte ein
Code: (dl )
use CGI::Carp qw/fatalsToBrowser warningsToBrowser/;

ein und schreibe nach der Ausgabe des Headers:
Code: (dl )
1
2
3
4
#Header
print "Content-type: text/html\n\n";
warningsToBrowser(1);
...


Dann werden dir Warnungen im HTML-Quellcode als HTML-Kommentar angezeigt.

Sonst kann ich so pauschal nix dazu sagen

gruß ALex
coax
 2003-09-24 14:05
#4580 #4580
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
@perl_maniac,

ich wuerde wenn ich die Datei locke auch wieder unlocken.
Code: (dl )
1
2
3
4
5
6
7
open(FH, '<', $filename) or die $!;
flock(FH, 2);

# .. doing some stuff

flock(FH, 8);
close(FH);
weiß nur nicht genau ob das mit deinen Problem zusammenhängt.
,,Das perlt aber heute wieder...'' -- Dittsche
perl_maniac
 2003-09-24 14:34
#4581 #4581
User since
2003-09-13
4 Artikel
BenutzerIn
[default_avatar]
Danke schon mal für eure Antworten!
Werd eure Tipps mal in meinem Quelltext berücksichtigen
und das Ganze mal weiter austesten, vielleicht findet sich der Fehler ja noch...

MfG
jan10001
 2003-09-24 15:32
#4582 #4582
User since
2003-08-14
962 Artikel
BenutzerIn
[default_avatar]
Quote
ich wuerde wenn ich die Datei locke auch wieder unlocken.
Ich würde sagen das ist es, das Script ist beendet und die Datei noch immer geblockt (Wenn auch nur für kurze Zeit.).
coax
 2003-09-24 15:37
#4583 #4583
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
[quote=jan10001,24.09.2003, 13:32]
Quote
ich wuerde wenn ich die Datei locke auch wieder unlocken.
Ich würde sagen das ist es, das Script ist beendet und die Datei noch immer geblockt (Wenn auch nur für kurze Zeit.).[/quote]
war mir nicht ganz sicher ob nicht vielleicht doch das close(Filehandle) auch den Block löst.
,,Das perlt aber heute wieder...'' -- Dittsche
betterworld
 2003-09-24 18:45
#4584 #4584
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=jan10001,24.09.2003, 13:32]
Quote
ich wuerde wenn ich die Datei locke auch wieder unlocken.
Ich würde sagen das ist es, das Script ist beendet und die Datei noch immer geblockt (Wenn auch nur für kurze Zeit.).[/quote]
Noe, wenn die Datei geschlossen oder das Programm beendet wird, wird auch der Lock aufgehoben. Aber gerade darin liegt ein weiteres Problem: Denn zwischen den beiden Oeffnungen der Datei besteht kein Lock! Wenn Du so arbeitest, kannst Du Dir den Lock auch gleich ganz schenken. Ich empfehle, die Datei einfach durchgaengig geoffnet zu lassen, und zwar rw.
Darin koennte auch dein Bug liegen, allerdings nur, wenn Dein Counter wirklich so frequentiert aufgerufen wird, dass solche race conditions entstehen.\n\n

<!--EDIT|Ishka|1064414972-->
pq
 2003-09-24 18:53
#4585 #4585
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=coax,24.09.2003, 12:05]ich wuerde wenn ich die Datei locke auch wieder unlocken.[/quote]
neiin... bitte nicht...
die datei wird automatisch vom close ge-unlocked.
alles andere wäre eine weitere fehlerquelle.

richtig ist, die datei in einem satz zum lesen und schreiben
öffnen. wie das geht, steht u.a. in perldoc perlopentut
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
perl_maniac
 2003-09-24 19:17
#4586 #4586
User since
2003-09-13
4 Artikel
BenutzerIn
[default_avatar]
Hallo und Danke an alle!
Werds mal so ausprobieren, vielleicht gehts dann!

MfG
<< >> 9 Einträge, 1 Seite



View all threads created 2003-09-24 13:24.