sroto: Geisterts? Textdatei als Datenbankersatz...

Hallo

Auf meiner Homepage führe ich eine kleine Zugriffsstatistik und speichere die Zugriffsdaten in einer Textdatei.
Das Script sieht etwa folgender massen aus:

$Datei=fopen("statistik.txt","r+");
fwrite($Datei,str_replace("\n","",$Timestamp));
fwrite($Datei,"#");
fwrite($Datei,str_replace("\n","",$IP));
fwrite($Datei,"#");
fwrite($Datei,str_replace("\n","",$Browser));
fwrite($Datei,"#");
fwrite($Datei,str_replace("\n","",gethostbyaddr($IP)));
fwrite($Datei,"#");
fwrite($Datei,str_replace("\n","",$HTTP_SERVER_VARS["HTTP_REFERER"]));
fwrite($Datei,"\n");

fclose($Datei);

Jede Zeile stellt einen Datensatz dar. Die Felder sind durch # getrennt.
So weit so gut. Nun kommt es aber zum Teil vor, dass sich unerklärliche  Zeilenumbrüche in einen Datensatz einschmuggeln, obwohl ich zusätzlich mit str_replace alle möglichen Zeilenumbrüche ersetze.

1095018938#81.63.118.124#)Browser#bsp#referer
1095018939#81.63.118.124#)Browser#bsp#referer
1095018940#81.63.118.124#)Brow
ser#bsp#referer
1095018941#81.63.118.124#)Browser#bsp#referer
1095018942#81.63.118.124#)Browser#bsp#referer

Wenn es in einem Feld einen Zeilenumbruch hat, bringt das natürlich die ganze Struktur durcheinander und ich kriege grosse Probleme beim auslesen.
Hatte schon jemand ein ähnliches Problem? Woher stammen diese Zeilenumbrüche? Kann es sein, dass wenn 2 User gleichzeitig auf die Homepage zugreifen, der Server die Textdatei "verunstaltet"?
Oder sind die Zeilenumbrüche das Werk von Geister in der Maschine, die durch zufällige Codesegmente hervorgerufen werden???

Oder würdet ihr die Textdatei anders aufbauen?

Vielen Dank für die Hilfe!!

Grüsse
sroto

  1. Hi,

    Oder würdet ihr die Textdatei anders aufbauen?

    Ja! Schau dir mal http://php.net/serialize und http://php.net/unserialize an. :-)

    Der Yeti

    --
    Habe nun, ach! WInfo, BWL, und Mathe, Und leider auch Info!
    Durchaus studiert, mit heißem Bemühn. Da steh' ich nun, ich armer Thor!
    Und bin so klug als wie zuvor!
    sh:( fo:| ch:? rl:? br:< n4:& ie:( mo:| va:| de:[ zu:) fl:| ss:) ls:< js:|
    http://community.de.selfhtml.org/fanprojekte/selfcode.htm
  2. Hi,

    Hatte schon jemand ein ähnliches Problem? Woher stammen diese Zeilenumbrüche?

    es könnte daran liegen, dass es ein anderer Zeilenumbruch als "\n" ist, z.B. "\r\n". Statt str_replace() solltest du trim() benutzen (http://www.php.net/manual/en/function.trim.php).

    Kann es sein, dass wenn 2 User gleichzeitig auf die Homepage zugreifen, der Server die Textdatei "verunstaltet"?

    Probleme kann das auf jeden Fall geben. Es ist bestimmt keine schlechte Idee, die Datei nach dem Öffnen für andere Zugriffe zu sperren, siehe flock() (http://www.php.net/manual/en/function.flock.php).

    Oder sind die Zeilenumbrüche das Werk von Geister in der Maschine, die durch zufällige Codesegmente hervorgerufen werden???

    Auch das halte ich für durchaus möglich - ich empfehle den PC-Exorzisten deines Vertrauens (http://www.gelbe-seiten.de).

    Oder würdet ihr die Textdatei anders aufbauen?

    Zumindest würde ich den wegzuschreibenden String aufbauen, bevor ich die Datei öffne, damit die Datei nicht länger als nötig geöffnet bleibt.

    Gruß,
    Andreas.

    1. Hallo Andreas

      Vielen Dank für deine Tipps! Ich werde sie ausprobieren und hoffe, dass sie meinem Problem Abhilfe verschaffen.

      Grüsse

      sroto