Counter in txt schreiben

sunflower84

Erfahrenes Mitglied
Hallo

Ich habe einen Counter für meine Webseite. Der die Anzahl der Aufrufe in eine txt speichert.
Jetzt würde ich gerne noch das Datum und die IP rein schreiben.
Das ganze soll in der txt so aussehen:

Datum IP Aufrufe gesamt: 123
01.01.2007 192.168.1.1

Aber sobald ich das Datum, die IP oder eine Überschrift in die txt rein schreibe hört mein Counter auf zu zählen und ich weiß nicht warum.

Hier mein Quellcode:
PHP:
  <?php
  $today = date("d.m.y");
  $ipadresse =getenv('REMOTE_ADDR');
  $datei = fopen("counter.txt","r+");
  $counterstand = fgets($datei, 50);
  if($counterstand == "")
    {
    $counterstand = 0;
    }
  $counterstand++;
  //echo $counterstand;
  rewind($datei);
  fwrite($datei,"$counterstand");
  fwrite($datei,"Datum");
  fwrite($datei, "$today/");
  fwrite($datei, "$ipadresse \n");
  fclose($datei);
  ?>

Lg
Sunflower84
 
Ich nehme mal an, das hat damit zu tun, dass du den gesamten Inhalt der Datei als String ausliest und in $counterstand speicherst.
Im Ursprünglichen Script war dieser "String" eine Zahl, d.h. PHP interpretiert $counterstand als integer und das hier:

PHP:
$counterstand++

funktioniert.

Es ist nicht möglich einen String um 1 zu erhöhen. ;)
 
Eventuell ist eine datenbankbasierende Lösung performanter und sicherer - Sofern die Lösung Filesystembasierend sein soll, würde ich die Sache anders angehen: Entweder alle Zeilen zusammenzählen oder beide Angaben in verschiedenen Dateien erfassen. Die vielen Funktionsaufrufe produzieren übrigens massig unnötigen Overhead ;)

PHP:
$fh = fopen('counter.txt', 'w+');
$c = (int) trim(fgets($fh));
fwrite($fh, ++$c);
fclose($fh);

$fh = fopen('ip.txt', 'a+');
$fputs($fh, "{$c} Datum " . date('Y-m-d') . " {$_SERVER['REMOTE_ADDR']}\n");
fclose($fh);
 
Bau die TXT-Datei anders auf:

Code:
Anzahl Aufrufe:
123
Datum - IP
23.11.2007 - 192.168.0.1
Auslesen würde ich so machen:
PHP:
$filename = 'counter.txt';
if(!file_exists($filename))
{
    $handle = fopen($filename, 'w');
    fclose($handle);
}
$counterArray = explode('\n', file_get_contents($filename));
$counterArray[1]++;
$counterArray[3] = date("d.m.y").' - '.$_SERVER['REMOTE_ADDR'];
file_put_contents($filename, implode('\n', $counterArray));
Gruß Radhad
 
Das von Radhad hat funktioniert. Bzw. hat funktioniert wenn ich die Hochkommas von \n mit Anführungszeichen ersetzt habe.
Jetzt sieht es so aus:

Gesamt
8
Datum - IP
23.11.07 - IP adresse
23.11.07 - IP adresse

Warum listet er aber das Datum und die Ip Adresse nur max. 2 mal auf. Egal wie oft ich aktualisiere. Der Counter erhöht sich, aber Datum und IP stehen max. 2 mal da.

Lg
Sunflower84
 
PHP:
$counterArray[3] = date("d.m.y").' - '.$_SERVER['REMOTE_ADDR'];

$counterArray[3] schreibt das Datum immer an die gleiche Stelle, das heist der alte Wert wird mit dem neuen überschrieben und nicht hinzugefügt.
 
@sunflower84: Oh, sorry, das war ein kleiner Flüchtigkeits-Fehler mit den ' statt ".

Das kann man leicht ändern:
PHP:
// Alt
$counterArray[3] = date("d.m.y").' - '.$_SERVER['REMOTE_ADDR'];
// Neu
$counterArray[3] = date("d.m.y").' - '.$_SERVER['REMOTE_ADDR']."\n".$counterArray[3];
So steht immer der neueste Eintrag oben

@ristone & sunflower84: Stimmt mit dem überschreiben, aber seit dem 1.10.2007 dürfen IP Adressen eigentlich garnicht mehr gespeichert werden, siehe http://www.heise.de/newsticker/meldung/96781

Deshalb habe ich es mit Absicht überschreiben lassen!
Was man speichern darf ist die SessionID, da diese nicht auf einen User zurückzuführen ist und somit auch zu Marktforschungszwecken und Statistiken verwendet werden darf.
 
Zuletzt bearbeitet:
Zurück