perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 20
Click for quality!




11.02.2012 / 07:03

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  CGI: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragCounter 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

Beitragre: 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

Beitragre: 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

Beitragre: Counter kaputt. . .
Seitenanfang
Gibt's denn ne Fehlermeldung...

Datum: 25.02.2005-08:39

Beitragre: 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

Beitragre: 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

Beitragre: 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

Beitragre: 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

-






-
-