Hallo
Ich habe das Problem, dass wenn viele User eine Seite aufrufen, welche mit Perl erzeugt wird, gewisse Dateien nach einer Weile bzw. bei zu vielen "simultanen" Zugriffen "geleert werden".
Die etwas genauere Beschreibung des Problems:
Bei jedem Seitenaufruf wird im Grunde folgendes ausgeführt (eigentlich werden mehr als nur das $tmp[0]++ ausgeführt, aber der einfachheithalber hier mal nur das).
##################code
#open counter.dat file
fopen(FILE, "<counter.dat");
my @tmp = <FILE>;
fclose(FILE);
$tmp[0]++;
#write counter.dat file back
fopen(FILE, ">counter.dat");
foreach (@tmp) {print FILE "$_\n";}
fclose(FILE);
##################code
Mit folgenden subs:
##################code
$fopen = 2;
$fclose = 8;
$uflock = 1;
sub fopen {
my($fh,$fn) = @_;
if($fn =~ m~/../~) {
eval { perror("OPEN_ERROR"); };
die "\n\nYou MUST use absolute paths.\n\n";
}
open($fh,$fn);
if($uflock) {
flock($fh,$fopen);
seek($fh,0,0);
}
}
sub fclose {
my($fh) = $_[0];
if($uflock) { flock($fh,$fclose); }
close($fh);
}
##################code
Nun ja, wie gesagt wird der Wert dann immer schön hochgezählt, plötzlich ist das Ganze aber dann wieder leer.
Gibt es da eine Möglichkeit. Ich dachte anfangs, mit dem File-Lock hätte ich das Problem gelöst. Scheinbar war dies aber ein Trugschluss...
Gruss und Dank
Jonas