Counter ohne mysql

Schlummi

Grünschnabel
Ich habe auf der Seite http://www.jf-wolterdingen.de einen Counter eingebaut. Soweit funz auch alles, nur ein kleines problem habe ich. Doch wenn ich die Seite aufrufe, dann aktualisiert dieser sich nicht, sondern erst wenn ich auf den Button des Browsers drücke.
Der Counter verfügt einen Reloadstop.

Wie kann ich den Counter so einrichten, dass dieser sich beim ersten aufrufen der Seite automatisch aktualisiert ?

<?php

$datei = "counter.txt";

$file = fopen($datei, "r");
$stand = fread($file, filesize($datei));
$stand = $stand+1;
fclose($file);


function ipcheck($client_ip)
{
switch(func_num_args())
{
case 4: $operating_dir=func_get_arg(3);
case 3: $max_timediff=func_get_arg(2);
case 2: $log_ip=func_get_arg(1);break;
default: $operating_dir=""; $max_timediff="3600"; $log_ip=true;
}
switch(func_num_args())
{
case 2: $max_timediff="3600";
case 3: $operating_dir="";break;
}

$file=$operating_dir . "ip.txt";
$seenbefore=false;

$lines=file($file);
for($i=0;$i<count($lines);$i++)
{
$ip_chunks=explode("-",$lines[$i]);
$timediff=time()-$ip_chunks[1];
if($timediff>$max_timediff) $lines[$i]="";
elseif($ip_chunks[0]==$client_ip) $seenbefore=true;
}

$handle = fopen($file,"w+");
if ($handle)
{
for($i=0;$i<count($lines);$i++) fputs($handle, $lines[$i]);
if(!$seenbefore && $log_ip) fputs($handle, $client_ip . "-" . time() . "\n");
fclose($handle);
}
return($seenbefore);
}

if(!ipcheck($REMOTE_ADDR))
{
$file = fopen($datei, "w");
fputs($file, $stand);
fclose($file);
}
?>

Sie sind der <?php echo $stand; ?>. Besucher seit dem 3.5.2004.
 
Zuletzt bearbeitet:
Was ist denn bitte ein "Button des Browsers"?
Bzw. Wo ist der? Entweder erkennt der meinen Beowser automatisch und werde direkt weitergeleitet oder ich bin blind
 
also erstmal: Ich habe genau das selbe Problem ;)

1. Du meinst den Button Aktualisieren.

2. Zum Problem:

Wie gesagt: Gelöst habe ich es auch noch nicht.
Das Problem ist, dass der Befehl, der den Counterstand erhöht gleichzeitig mit der ausgebenden Datei (denn das ist ja ein und das selbe Skript) geladen wird.

Wenn du also gleichzeitig abfragst und erhöhst, kannst du nicht den "richtigen" Stand kriegen, sonder nur Stand minus 1.

Is aber nicht sonderlich schlimm.
Entweder du ignorierst den Fehler von 1 User, oder du setzt von Anfang an den Stand des Counters auf 1 - dann ist der Anzeigefehler umgangen - nur ist dann der reale Counterstand falsch ;-)

Hoffe, das bringt dich weiter ;-)
 
So - Problem gelöst! ;)

Also - der Fehler liegt hier: Du liest den Counterstand schon ein, bevor deine Reloadsperre (per Ip) greift - und damit überhaupt eine neue IP hinzukommen kann und erhöhst dann einfach den Counterstand. Dann frägst du aber $stand ab! Diese Variable musst du aber erst neu einlesen.

Lösung:

Kurz vor deiner Auswertung (Sie sind der xte Besucher auf der Site) gibst du noch hinzu:

$stand_tatsache=fread(deinencounter.txt);

und dann:

echo "Sie sind der $stand_tatsache ste Besucher auf dieser Seite";

Sollte eigentlich funktionieren

cu shutdown
 
Zurück