Zähler

Hallo Experten

ist eigentlich nicht so wichtig.
Habe einige Nostalgiegames und C64 zum Download.
Aus Interesse möchte ich nur wissen, wie oft ‚gedownloadet‘ wird.
Habe mir folgenden Zähler gebaut:

$zaehler[0] = 0;
$CR = CHR(13);
$LF = CHR(10);
$RET = $CR.$LF;
$datendatei = „download.txt“;
$zaehler = file($datendatei);
$zaehler[0] += 1;
$dz = fopen($datendatei, „w“);
fwrite ($dz, $zaehler[0]);
fclose($dz);

Im Prinzip funktioniert das.
Da es halt nur Hobbyseiten sind, überprüfe ich das sehr selten.
Ab und zu lese ich mir die download.txt ein, um zu sehen,
wieviele Downloads es geworden sind.

Problem:
Irgendwann ist der Inhalt wieder herunter gezählt.
Ob wieder auf Null, weiß ich nicht, weil ja zwischenzeitlich wieder
ein paar Downloads waren.
Beispiel:
5000 Downloads. Am nächsten Tag waren es nur noch 200

Wenn ich das teste, funktioniert das alles einwandfrei.
Irgendwann aber schlägt das zurück.
Wieso?

Gruss
Klaus

aus dem Grund gibt es Datenbanken… :wink:
vermutlich zerschiesst es Dir die Datei, wenn 2 Leute gleichzeitig darauf zugreifen wollen…

Der eine zugriff will gerade schreiben und der andere gerade lesen.
Der schreibzugriff blockiert den Lesezugriff. der setzt damit den neuen counter auf 0+1 = 1 und schreibt im Anschluss das file neu…
einfachste Lösung:
If ($zaehler[0] == 1) die();
Du solltest dann nur nicht komplett neu (mit 0) anfangen :wink: sonst wird nie weitergezählt *g*

Grüße
Munich

Hallo Klaus,

ist eigentlich nicht so wichtig.
Habe einige Nostalgiegames und C64 zum Download.
Aus Interesse möchte ich nur wissen, wie oft ‚gedownloadet‘
wird.
Habe mir folgenden Zähler gebaut:

$zaehler[0] = 0;
$CR = CHR(13);
$LF = CHR(10);
$RET = $CR.$LF;

Problem:
Irgendwann ist der Inhalt wieder herunter gezählt.
Ob wieder auf Null, weiß ich nicht, weil ja zwischenzeitlich
wieder
ein paar Downloads waren.
Beispiel:
5000 Downloads. Am nächsten Tag waren es nur noch 200

Wenn ich das teste, funktioniert das alles einwandfrei.
Irgendwann aber schlägt das zurück.

Wie MunicFreak sagte ist das keine sehr robuste Lösung.
Da ich auch gerade beim PHP-lernen bin (Perlkenntnisse
sind nicht mehr so gefragt :wink:, habe ich mal versucht,
einen etwas besseren „simplen counter“ zu basteln.

Vielleicht nützt es ja was.

<?php $filename = 'download.txt';<br /> 
 if( @stat($filename) == FALSE ) // Datei nicht vorhanden, erzeugen
 $handle = fopen($filename, 'w+');
 else // Datei schon vorhanden
 $handle = fopen($filename, 'r+');

 if( $handle == FALSE ) {
 exit("cant't open r+/w+ file $filename
Exit!");
 } 

 $n = 0;
 while( flock($handle, LOCK\_EX) == 0 ) { // versuche, die Datei zu sperren
 usleep(100000); 
 if($n++ \> 10) exit("cant't create ex lock on $filename
Exit!");
 } 

 rewind($handle); // OK, sind drin! An den Anfang spulen und lesen
 $zeile = fgets($handle);
 $zugr = (int)$zeile + 1;
 $date = gmstrftime("%F %T", time());
 
 rewind($handle); // Nochmal an den Anfang spulen und schreiben
 fputs ($handle, "$zugr\t$date\n");
 fclose($handle); // Lock auf $handle entfernen
 
?\>

Grüße

CMБ

Hallo Munich (und danke CM5 für den Code)

Ähnliches habe ich mir gedacht.
Da es im Schnitt aber täglich nur 20 Downloads sind,
habe ich gedacht, das müsste schon grosser Zufall sein,
wenn 2 User gleichzeitig zugreifen.
Das muss aber in der „Hauptverkehrszeit“ sein (18 - 22 Uhr).

Was ist bei ner Datenbank anders?
Entschuldigung, habe keine blasse Ahnung über Datenbankprogrammierung,
weil mich das bis jetzt (noch) nicht interessiert hat.

Angenommen man kann in ner Datenbank einen Counter einbauen.
Die Datenbank ist aber z.B. gefüllt mit 10.000 Begriffe
Counter auslesen und einschreiben müsste doch länger dauern,
als wenn nur eine Zahl in ner Textdatei neu geschrieben werden muss.

Ach so:
Da fällt mir noch was ein.
CSS Style-Sheets sind blöde.
Warum?
Die bringen mir in Strato die Statistk durcheinander.
Ich habe in vielen Dateien nur die Links (Farbe etc.) mit externer
CSS Style-Sheet-Datei definiert.
Diese Datei steht nun in der Statistik ganz oben.
Kann man da etwas ändern?

Gruss
Klaus